Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO-RESOLVIDO-
IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO-RESOLVIDO-
ola genios do excel, preciso importar arquivos bancarios em formato txt, mais como nesses arquivos existem informaçoes como cabeçalho, remessa, eu preciso que o vba só importe a linha se na posiçao 393 existir caractere, se nao existir nao importe a linha,faça isso até que na posição 393 não tenha mais caractere, segue em anexo o arquivo bancario.
- Anexos
-
- ITAU010219.rar
- (6.57 KiB) Baixado 286 vezes
Editado pela última vez por LuizFeijo em Ter Mar 26, 2019 10:06 am, em um total de 1 vez.
-
- Manda bem
- Mensagens: 107
- Registrado em: Qua Nov 29, 2017 11:51 am
- Localização: Fortaleza - CE
Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO
LuisFeijo,
Bom dia!
Tentei baixar seu arquivo mas... ocorreu um tipo de erro. Tem como compactar com .ZIP?
Bom dia!
Tentei baixar seu arquivo mas... ocorreu um tipo de erro. Tem como compactar com .ZIP?
Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO
olá wagner, anexei como zip nesta mensagem.
- Anexos
-
- ITAU010219.zip
- (6.94 KiB) Baixado 285 vezes
- Reinaldo
- Jedi
- Mensagens: 1537
- Registrado em: Sex Ago 01, 2014 4:09 pm
- Localização: Garça - SP / SCS - SP
Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO
Voçe tem o layout de importação desse arquivo? Pois aparentemente são campos de largura fixa e quando não tem dados são preenchidos (aparentemente) com espaço, assim ficar contando onde é a posição X e osso
Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO
Olá Srº Reinaldo, muito bom vê-lo novamente! sim, o layout do aquivo retorno é composto por 400 caracteres cada linha, e os espaços em branco também contam como caracteres!
Eu anexei a planilha que utilizo para realizar a importação do .TXT e um arquivo .txt - este arquivo tem no máximo 10 linhas, eu editei o arquivo de uma forma sucinta, (lembrando que o senhor tem que desmarcar a quebra automática de linha do TXT) para ver como é o padrão do arquivo. Após isso, se o senhor for para o fim das linhas "lado direito", vai ver mais ou menos desse jeito:
00000000000000000000000FABIANO S DA SILVA MERCADINHO 000002
00000000000000000000000FABIANO S DA SILVA MERCADINHO 000003
13091800000000000000000000000LESANDRO PEREIRA DA SILVA SUPE CK000107
13091800000000000000000000000PAG MENOS SUPERMERCADO 4 LTDA CK000108
13091800000000000000000000000PAG MENOS SUPERMERCADO LTDA B7000109
se voce perceber, no arquivo, antes dos zeros da pessoa LESANDRO PERERIRA- existe o numero 130918, e no fim em negrito, antes do 000107 tem LEtras, "CK".
Entao eu preciso que o vba importe as linhas apenas que tenham essa data "130918" ou as que na posiçao 393 "CK000107" tem caractere.
- Anexos
-
- XMLITAU1.zip
- (426.92 KiB) Baixado 277 vezes
- Reinaldo
- Jedi
- Mensagens: 1537
- Registrado em: Sex Ago 01, 2014 4:09 pm
- Localização: Garça - SP / SCS - SP
Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO
Creio que entendi
Veja se atende;
o primeiro if que esta comentado, verifica se na string da posição 296 até 302 corresponde a 130818
O Segundo if, seleciona o caractere da posição 393 e verifica se e letra
Veja se atende;
o primeiro if que esta comentado, verifica se na string da posição 296 até 302 corresponde a 130818
O Segundo if, seleciona o caractere da posição 393 e verifica se e letra
Código: Selecionar todos
'Verifica se o valor da string é o esperado
'If Mid(L, 296, 6) = "130818" Then
'Seleciona o caractere na posição 393 e verifia se e letra
xAsc = Asc(UCase(Mid(L, 393, 1)))
If xAsc > 64 And xAsc < 91 Then
W.Cells(LN, COL).Value = Mid$(L, PTI1, PTF1)
W.Cells(LN, COL + 1).Value = Mid$(L, PTI2, PTF2)
W.Cells(LN, COL + 2).Value = Mid$(L, PTI3, PTF3)
W.Cells(LN, COL + 3).Value = Mid$(L, PTI4, PTF4)
W.Cells(LN, COL + 4).Value = Mid$(L, PTI5, PTF5)
LN = LN + 1
End If
Loop
Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO
Bom dia Sr Reinaldo, na minha planilha estou usando o comando 'DO WHILE'
Do While Not EOF(I)
frmmenu.LBLSTATUS.Caption = "PROCESSANDO LINHA:" & LN - 1
DoEvents
Line Input #I, L
W.Cells(LN, COL).Value = Mid$(L, PTI1, PTF1)
W.Cells(LN, COL + 1).Value = Mid$(L, PTI2, PTF2)
W.Cells(LN, COL + 2).Value = Mid$(L, PTI3, PTF3)
W.Cells(LN, COL + 3).Value = Mid$(L, PTI4, PTF4)
W.Cells(LN, COL + 4).Value = Mid$(L, PTI5, PTF5)
LN = LN + 1
Loop
Aonde eu devo substituir, o meu comando?
Do While Not EOF(I)
frmmenu.LBLSTATUS.Caption = "PROCESSANDO LINHA:" & LN - 1
DoEvents
Line Input #I, L
W.Cells(LN, COL).Value = Mid$(L, PTI1, PTF1)
W.Cells(LN, COL + 1).Value = Mid$(L, PTI2, PTF2)
W.Cells(LN, COL + 2).Value = Mid$(L, PTI3, PTF3)
W.Cells(LN, COL + 3).Value = Mid$(L, PTI4, PTF4)
W.Cells(LN, COL + 4).Value = Mid$(L, PTI5, PTF5)
LN = LN + 1
Loop
Aonde eu devo substituir, o meu comando?
- Reinaldo
- Jedi
- Mensagens: 1537
- Registrado em: Sex Ago 01, 2014 4:09 pm
- Localização: Garça - SP / SCS - SP
Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO
Logo apos o Do While
Código: Selecionar todos
'INSERIR DADOS NA PLANILHA
'-------------------------------------------------------------
Do While Not EOF(I)
frmmenu.LBLSTATUS.Caption = "PROCESSANDO LINHA:" & LN - 1
DoEvents
Line Input #I, L
'Verifica se o valor da string é o esperado
'If Mid(L, 296, 6) = "130818" Then
'Seleciona o caractere na posição 393 e verifia se e letra
xAsc = Asc(UCase(Mid(L, 393, 1)))
If xAsc > 64 And xAsc < 91 Then
W.Cells(LN, COL).Value = Mid$(L, PTI1, PTF1)
W.Cells(LN, COL + 1).Value = Mid$(L, PTI2, PTF2)
W.Cells(LN, COL + 2).Value = Mid$(L, PTI3, PTF3)
W.Cells(LN, COL + 3).Value = Mid$(L, PTI4, PTF4)
W.Cells(LN, COL + 4).Value = Mid$(L, PTI5, PTF5)
LN = LN + 1
End If
Loop
- Anexos
-
- XMLITAU1_teste.zip
- (426.87 KiB) Baixado 273 vezes
Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO
Boa Tarde Sr Reinaldo, funcionou! é exatamente o que preciso. SE não for pedir muito, o Sr pode me explicar oque significa,qual a logica de 'If Mid(L, 296, 6) = "130818" Then (nesse caso como está com aspas '' ela não é uma variável não é? é só uma "explicação"?Reinaldo escreveu: ↑Qui Mar 21, 2019 11:01 am Logo apos o Do WhileCódigo: Selecionar todos
'INSERIR DADOS NA PLANILHA '------------------------------------------------------------- Do While Not EOF(I) frmmenu.LBLSTATUS.Caption = "PROCESSANDO LINHA:" & LN - 1 DoEvents Line Input #I, L 'Verifica se o valor da string é o esperado 'If Mid(L, 296, 6) = "130818" Then 'Seleciona o caractere na posição 393 e verifia se e letra xAsc = Asc(UCase(Mid(L, 393, 1))) If xAsc > 64 And xAsc < 91 Then W.Cells(LN, COL).Value = Mid$(L, PTI1, PTF1) W.Cells(LN, COL + 1).Value = Mid$(L, PTI2, PTF2) W.Cells(LN, COL + 2).Value = Mid$(L, PTI3, PTF3) W.Cells(LN, COL + 3).Value = Mid$(L, PTI4, PTF4) W.Cells(LN, COL + 4).Value = Mid$(L, PTI5, PTF5) LN = LN + 1 End If Loop
pode me explicar tambem este>> xAsc = Asc(UCase(Mid(L, 393, 1))) -- If xAsc > 64 And xAsc < 91 Then
- Reinaldo
- Jedi
- Mensagens: 1537
- Registrado em: Sex Ago 01, 2014 4:09 pm
- Localização: Garça - SP / SCS - SP
Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO
Na posição 296 à 304 encontra-se o campo que"negritou" em seu post anterior "13091800000000000..."
assim o "valor" está entre aspas pois o retorno e strings(texto), deixei comentado apenas como deve ser a sintaxe se quiser/necessitar utilizar esse local para comparação.
As letras de nosso alfabeto (maiúsculas) vão de 65 à 90 por isso se xAsc estiver nesse intervalo, o caractere da posição corresponde a uma letra
assim o "valor" está entre aspas pois o retorno e strings(texto), deixei comentado apenas como deve ser a sintaxe se quiser/necessitar utilizar esse local para comparação.
Cada caractere corresponde a um numero na tabela ASCII (veja um exemplo/modelo em : "https://web.fe.up.pt/~ee96100/projecto/ ... 0ascii.htmpode me explicar também este>>..
As letras de nosso alfabeto (maiúsculas) vão de 65 à 90 por isso se xAsc estiver nesse intervalo, o caractere da posição corresponde a uma letra