Prezados, boa noite!
Gostaria de fazer importação do arquivo OFX para o meu BD. Já tenho o código que importa os dados e está funcionando perfeitamente. Gostaria de importar esses dados com maior segurança, para fazer as devidas referencias corretas com as contas já pré cadastradas no BD.
Gostaria de comparar os dois campos abaixo que vêm no arquivo OFX:
Campo que informa o numero do banco:
0341
Campo que informa o numero da agencia (2222) e o numero da conta corrente já com o digito verificador (444444)
2222444444
No meu BD tenho uma tabela onde estão os dados das contas bancarias, como segue:
nomedobanco - (Nome do banco Exemplo: Itau)
idbanco - (numero do banco: Exemplo: 0341)
idconta - (numero da agencia e conta corrente: Exemplo: 2222444444)
conta - (numero da conta contábil: Exemplo: 10101)
O que eu quero fazer é que antes de concretizar a importação, um código que permita checar se o numero do banco e da conta corrente estão corretos.
A lógica é mais ou menos assim:
se idbanco (BD) for igual a (campo arquivo OFX) E idconta (BD) for igual a (campo arquivo OFX), então importar
caso contrario
msgbox " banco e conta corrente não conferem com o arquivo OFX"
Também gostaria de poder selecionar a data dos lançamentos a importar do arquivo OFX, como por exemplo: (campo arquivo OFX) da seguinte forma:
entre [Me.Dtinicial] e [Me.Datfinal]
Sei que isso pode ser dentro de uma condição "IF", já tentei mas não consegui fazer que os campos sejam comparados.
Segue abaixo o código completo que uso para a importação do arquivo OFX para que alguém me oriente onde e como colocar essas condições. Creio que é na "SELECT CASE ROTULO":
Agradeço muito por essa ajuda!
Gostaria de fazer importação do arquivo OFX para o meu BD. Já tenho o código que importa os dados e está funcionando perfeitamente. Gostaria de importar esses dados com maior segurança, para fazer as devidas referencias corretas com as contas já pré cadastradas no BD.
Gostaria de comparar os dois campos abaixo que vêm no arquivo OFX:
Campo que informa o numero do banco:
Campo que informa o numero da agencia (2222) e o numero da conta corrente já com o digito verificador (444444)
No meu BD tenho uma tabela onde estão os dados das contas bancarias, como segue:
nomedobanco - (Nome do banco Exemplo: Itau)
idbanco - (numero do banco: Exemplo: 0341)
idconta - (numero da agencia e conta corrente: Exemplo: 2222444444)
conta - (numero da conta contábil: Exemplo: 10101)
O que eu quero fazer é que antes de concretizar a importação, um código que permita checar se o numero do banco e da conta corrente estão corretos.
A lógica é mais ou menos assim:
se idbanco (BD) for igual a
caso contrario
msgbox " banco e conta corrente não conferem com o arquivo OFX"
Também gostaria de poder selecionar a data dos lançamentos a importar do arquivo OFX, como por exemplo:
Sei que isso pode ser dentro de uma condição "IF", já tentei mas não consegui fazer que os campos sejam comparados.
Segue abaixo o código completo que uso para a importação do arquivo OFX para que alguém me oriente onde e como colocar essas condições. Creio que é na "SELECT CASE ROTULO":
- Código:
Public Function ImportaOFX(ByVal caminho As String, ByVal cConta As String)
Dim db As Database
Dim rs As Recordset
Dim r As Recordset
Dim CodOFx As Integer
Dim Sec As Variant
Dim Rotulo As String
Dim Linha As String
Set db = CurrentDb
caminho = Me.txtCaminho
cConta = Me.txtConta
'Abrir arquivo, adicionar novo extrato na tabela OFX
'---------------------------------------------------
nFileNum = FreeFile
Open caminho For Input As nFileNum
'Abrir tabela tbl_OFX e adicionar novo extrato
Set r = db.OpenRecordset("tbl_OFX", dbOpenDynaset)
r.AddNew
r!NomeExtrato = "EXT-" & cConta & Format(Time, "HHssmm")
r!Data = Format(Date, "dd/mm/yyyy", vbUseSystemDayOfWeek, vbUseSystem)
r!Conta = cConta
'Percorre linha por linha do arquivo
Do Until EOF(nFileNum)
Line Input #nFileNum, slinetext
If slinetext = "" Then 'se a linha é vazia, vai pra próxima!
GoTo pulalinha
End If
Linha = LTrim(Replace(slinetext, vbTab, " ")) 'Substitui as tabulações por espaços e corta os espaços
Sec = Split(Linha, ">", 2, vbTextCompare) 'Secciona a linha até o caracter >
Rotulo = Sec(0) 'pega a primeira parte da seção
Select Case Rotulo
Case Is = "<BANKID"
r!idbanco = Mid(Linha, 9, 4)
Case Is = "<ACCTID"
r!idconta = Mid(Linha, 9, 15)
Case Is = "<DTSTART"
r!dti = DateSerial(Int(Mid(Linha, 10, 4)), Int(Mid(Linha, 14, 2)), Int(Mid(Linha, 16, 2)))
Case Is = "<DTEND"
r!dtf = DateSerial(Int(Mid(Linha, 8, 4)), Int(Mid(Linha, 12, 2)), Int(Mid(Linha, 14, 2)))
End Select
pulalinha:
'Form_OFXimport.pbar.Value = Form_OFXimport.pbar.Value + 0.1 'Barra de progresso
Loop
r.Update
r.MoveLast
CodOFx = r!cod 'pega o código do extrato salvo para vincular os movimentos
r.Close
Close nFileNum
Set r = Nothing
'Agora lançar os movimentos
'-------------------------------------------------------------------------
Open caminho For Input As nFileNum 'abre o mesmo arquivo
Set rs = db.OpenRecordset("tbl_SubOFX", dbOpenDynaset) 'abre a tabela para receber os dados
Do Until EOF(nFileNum)
Line Input #nFileNum, slinetext
If slinetext = "" Then 'se a linha é vazia, pula ela!
GoTo passadireto
End If
Linha = LTrim(Replace(slinetext, vbTab, " ")) 'substitui as tabulações por espaços e corta os espaços
Sec = Split(Linha, ">", 2, vbTextCompare) 'secciona a linha (>Piscando
Rotulo = Sec(0) 'pega a primeira parte da seção
Select Case Rotulo
Case Is = "<STMTTRN"
rs.AddNew
Case Is = "<TRNTYPE"
'define o tipo = 1 ou 2 e armazena
If Mid(Linha, 10, 5) = "DEBIT" Then
rs!Tipo = 2
Else
rs!Tipo = 1
End If
Case Is = "<DTPOSTED"
'armazena a data
rs!Data = DateSerial(Int(Mid(Linha, 11, 4)), Int(Mid(Linha, 15, 2)), Int(Mid(Linha, 17, 2)))
Case Is = "<TRNAMT"
'armazena o valor
If rs!Tipo = 1 Then
rs!Valor = Replace(Mid(Linha, 9), ".", ",")
Else
rs!Valor = Replace(Mid(Linha, 10), ".", ",")
End If
Case Is = "<CHECKNUM"
'armazena o cheque
rs!doc = Mid(Linha, 11, 6)
Case Is = "<MEMO"
'armazena o memorando
rs!Memorando = Mid(Linha, 7, 50)
Case Is = "</STMTTRN"
'armazena o CODOFX
rs!OFX = CodOFx
rs.Update
Case Is = "</OFX"
rs.Close
'sai da função
End Select
passadireto:
Loop
Close nFileNum
MsgBox "Arquivo OFX importado com sucesso!", vbInformation, "Mensagem"
Set db = Nothing
Set rs = Nothing
End Function
Agradeço muito por essa ajuda!