Vídeo recomendado
https://youtu.be/diWPPPhW-9E

IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO-RESOLVIDO-

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
LuizFeijo
Colaborador
Colaborador
Mensagens: 26
Registrado em: Dom Nov 18, 2018 6:08 pm

IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO-RESOLVIDO-

Mensagem por LuizFeijo »

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 258 vezes
Editado pela última vez por LuizFeijo em Ter Mar 26, 2019 10:06 am, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Wagner Morel
Manda bem
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

Mensagem por Wagner Morel »

LuisFeijo,

Bom dia!

Tentei baixar seu arquivo mas... ocorreu um tipo de erro. Tem como compactar com .ZIP?


LuizFeijo
Colaborador
Colaborador
Mensagens: 26
Registrado em: Dom Nov 18, 2018 6:08 pm

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO

Mensagem por LuizFeijo »

olá wagner, anexei como zip nesta mensagem.
Anexos
ITAU010219.zip
(6.94 KiB) Baixado 267 vezes


Avatar do usuário
Reinaldo
Jedi
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

Mensagem por Reinaldo »

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


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


LuizFeijo
Colaborador
Colaborador
Mensagens: 26
Registrado em: Dom Nov 18, 2018 6:08 pm

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO

Mensagem por LuizFeijo »

Reinaldo escreveu: Ter Mar 19, 2019 2:46 pm 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
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 254 vezes


Avatar do usuário
Reinaldo
Jedi
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

Mensagem por Reinaldo »

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

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


LuizFeijo
Colaborador
Colaborador
Mensagens: 26
Registrado em: Dom Nov 18, 2018 6:08 pm

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO

Mensagem por LuizFeijo »

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?


Avatar do usuário
Reinaldo
Jedi
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

Mensagem por Reinaldo »

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 254 vezes


LuizFeijo
Colaborador
Colaborador
Mensagens: 26
Registrado em: Dom Nov 18, 2018 6:08 pm

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO

Mensagem por LuizFeijo »

Reinaldo escreveu: Qui Mar 21, 2019 11:01 am 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
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"?

pode me explicar tambem este>> xAsc = Asc(UCase(Mid(L, 393, 1))) -- If xAsc > 64 And xAsc < 91 Then


Avatar do usuário
Reinaldo
Jedi
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

Mensagem por Reinaldo »

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.
pode me explicar também este>>..
Cada caractere corresponde a um numero na tabela ASCII (veja um exemplo/modelo em : "https://web.fe.up.pt/~ee96100/projecto/ ... 0ascii.htm
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


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder