Página 1 de 3

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

Enviado: Dom Mar 17, 2019 10:05 pm
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.

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

Enviado: Seg Mar 18, 2019 11:36 am
por Wagner Morel
LuisFeijo,

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

Enviado: Seg Mar 18, 2019 1:06 pm
por LuizFeijo
olá wagner, anexei como zip nesta mensagem.

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

Enviado: Ter Mar 19, 2019 2:46 pm
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

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

Enviado: Ter Mar 19, 2019 6:33 pm
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.

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

Enviado: Qua Mar 20, 2019 3:10 pm
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

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

Enviado: Qui Mar 21, 2019 7:54 am
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?

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

Enviado: Qui Mar 21, 2019 11:01 am
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

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

Enviado: Qui Mar 21, 2019 1:33 pm
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

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

Enviado: Qui Mar 21, 2019 9:42 pm
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