Olá, em cima do joelho acho que está o que pretende.
Veja código, utilizado:
Segue o teste.
Nota: Alterei titulo do tópico para ficar mais fácil nas pesquisa para os membros do fórum.
Abraço
Veja código, utilizado:
- Código:
Sub importarTxt()
'ahteixeira 2016 - maximoaccess
Dim strLinha As String
Dim linha, nRegisto As Double
Dim Empresa, CNPJ, ReferenteMes, CodigoEmp, NomeEmp, ADM, CTPS, PIS, CFP, Funcao, CI
Dim CodMov, DescMov, NoDias, Abono, Desconto
Dim TotAbono, TotDesconto, ValorPago, ValorFinal1, ValorFinal2, ValorFinal3, ValorFinal4, ValorFinal5
'inicia contador de registos a importar
nRegisto = 1
' se pretender fazer arquivo na linha acima atribua o último da tabela + 1
' e retire ou comente as duas linhas abaixo
'apaga tabelas que vao receber os dados
DoCmd.RunSQL "DELETE * FROM tbl_Movimento"
DoCmd.RunSQL "DELETE * FROM tbl_MovimentoDetalhe"
'ficheiro a ler para importar
Open Application.CurrentProject.Path & "\teste.txt" For Input As #1
'inicio leitura do txt linha a linha
Do Until EOF(1)
linha = linha + 1
Line Input #1, strLinha
'processa campos que estao na linha 1
If linha = 1 Then
Empresa = Trim(Mid(strLinha, 1, 5))
End If
If linha = 3 Then
CNPJ = Mid(strLinha, 14, 18)
ReferenteMes = Right(strLinha, Len(strLinha) - (InStr(strLinha, "Referente ao mês de") + 19))
End If
If linha = 5 Then
CodigoEmp = Trim(Left(strLinha, 10))
NomeEmp = Trim(Mid(strLinha, 12, 40))
ADM = Mid(strLinha, 57, 10)
CTPS = Mid(strLinha, 73, 15)
PIS = Mid(strLinha, 93, 11)
CFP = Mid(strLinha, 109, 11)
End If
If linha = 6 Then
Funcao = Trim(Mid(strLinha, 60, 42))
CI = Trim(Mid(strLinha, 106, 10))
End If
'processa da linha 9 até 23 - as 15 linhas do detalhe
If linha > 8 And linha < 24 And Len(strLinha & "") <> 0 Then
'Adiciona registo à tabela Movimento (apenas na linha 9)
'para se poder lançar registos na tabela MovimentoDetalhe
'é necessário, por causa das relações, no final é atualizado com o resto da informação
If linha = 9 Then DoCmd.RunSQL "INSERT INTO tbl_Movimento ( NoRegisto ) SELECT " & nRegisto & ";"
CodMov = Trim(Mid(strLinha, 1, 9))
DescMov = Trim(Mid(strLinha, 11, 50))
NoDias = Trim(Mid(strLinha, 61, 9))
Abono = Trim(Mid(strLinha, 80, 12))
Desconto = Trim(Mid(strLinha, 104, 12))
'adiciona ao MovimentoDetalhe
DoCmd.RunSQL "INSERT INTO tbl_MovimentoDetalhe ( NoRegistoDetalhe, CodMov, DescMov, NoDias, Abono, Desconto ) SELECT " & _
nRegisto & "," & CodMov & ",'" & DescMov & "','" & NoDias & "','" & Abono & "','" & Desconto & "';"
End If
If linha = 25 Then
TotAbono = Trim(Mid(strLinha, 82, 10))
TotDesconto = Trim(Mid(strLinha, 106, 10))
End If
If linha = 27 Then
ValorPago = Trim(Mid(strLinha, 106, 10))
End If
If linha = 29 Then
ValorFinal1 = Trim(Mid(strLinha, 11, 10))
ValorFinal2 = Trim(Mid(strLinha, 28, 10))
ValorFinal3 = Trim(Mid(strLinha, 52, 10))
ValorFinal4 = Trim(Mid(strLinha, 69, 10))
ValorFinal5 = Trim(Mid(strLinha, 95, 10))
End If
If linha = 30 Then
'atualiza dados
DoCmd.RunSQL "UPDATE (tbl_Movimento) SET Empresa = '" & Empresa & "'," & _
"CNPJ = '" & CNPJ & "'," & _
"ReferenteMes = '" & ReferenteMes & "'," & _
"CodigoEmp = '" & CodigoEmp & "'," & _
"NomeEmp = '" & NomeEmp & "'," & _
"ADM = '" & ADM & "'," & _
"CTPS = '" & CTPS & "'," & _
"PIS = '" & PIS & "'," & _
"CFP = '" & CFP & "'," & _
"Funcao = '" & Funcao & "'," & _
"CI = '" & CI & "'," & _
"TotAbono = '" & TotAbono & "'," & _
"TotDesconto = '" & TotDesconto & "'," & _
"ValorPago = '" & ValorPago & "'," & _
"ValorFinal1 = '" & ValorFinal1 & "'," & _
"ValorFinal2 = '" & ValorFinal2 & "'," & _
"ValorFinal3 = '" & ValorFinal3 & "'," & _
"ValorFinal4 = '" & ValorFinal4 & "'," & _
"ValorFinal5 = '" & ValorFinal5 & "'" & _
"WHERE tbl_Movimento.NoRegisto = " & nRegisto & ";"
'actualiza contadores
nRegisto = nRegisto + 1
linha = 0
'limpa campos
Empresa = ""
CNPJ = ""
ReferenteMes = ""
CodigoEmp = ""
NomeEmp = ""
ADM = ""
CTPS = ""
PIS = ""
CFP = ""
Funcao = ""
CI = ""
CodMov = ""
DescMov = ""
NoDias = ""
Abono = ""
Desconto = ""
TotAbono = ""
TotDesconto = ""
ValorPago = ""
ValorFinal1 = ""
ValorFinal2 = ""
ValorFinal3 = ""
ValorFinal4 = ""
ValorFinal5 = ""
End If
'fim eitura txt
Loop
'fechar ficheiro
Close #1
MsgBox "Feito, Verifique tabelas.", vbInformation, ""
End Sub
Segue o teste.
Nota: Alterei titulo do tópico para ficar mais fácil nas pesquisa para os membros do fórum.
Abraço
- Anexos
- ImportarTXT_recibos_rev1.zip
- Você não tem permissão para fazer download dos arquivos anexados.
- (27 Kb) Baixado 73 vez(es)
Última edição por ahteixeira em 5/4/2016, 09:34, editado 1 vez(es)