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

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

Mensagem por LuizFeijo »

Reinaldo escreveu: Qui Mar 21, 2019 9:42 pm 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
no caso da parte "130918", o vba faz alguma verificação para saber se na posiçao 296 à 304 existe o numero "130918", ou verificação é para ver se existe um numero qualquer nesta posição?


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.


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 »

Nessa proposta--> If Mid(L, 296, 6) = "130818" <-- e verificado se o conteúdo de 296 à 304 é igual a "130818"
A sintaxe da função mid é -->Mid(string, start[, length])<-- (similar a função deplanilha Ext.Texto)
E retorna um String(Texto) de seis caractere


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: Sex Mar 22, 2019 5:50 pm Nessa proposta--> If Mid(L, 296, 6) = "130818" <-- e verificado se o conteúdo de 296 à 304 é igual a "130818"
A sintaxe da função mid é -->Mid(string, start[, length])<-- (similar a função deplanilha Ext.Texto)
E retorna um String(Texto) de seis caractere
Bom dia Sr Reinaldo, nesse caso, se eu usar somente a ultima parte, como condiçao, "ASCII" para verificar se ha Letras na posiçao '393', e não quiser verificar a data '130818' como condiçao, basta apenas eu apagar o "If mid"?


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 »

Já não estou entendendo.
Para verificar se é letra deverá ser utilizado:

Esta linha separa o caractere da posição 393( midi(L,393,1), converte para maiúsculo UCase(...), e atribui valor ASCII Asc(...); a variavel xAsc recebe então esse valor.
xAsc = Asc(UCase(Mid(L, 393, 1)))

Esta linha verifica se o valor ASCII encontrado anteriormente está na range de letras
If xAsc > 64 And xAsc < 91 Then
Qual a real duvida/dificuldade então


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: Seg Mar 25, 2019 4:12 pm Já não estou entendendo.
Para verificar se é letra deverá ser utilizado:

Esta linha separa o caractere da posição 393( midi(L,393,1), converte para maiúsculo UCase(...), e atribui valor ASCII Asc(...); a variavel xAsc recebe então esse valor.
xAsc = Asc(UCase(Mid(L, 393, 1)))

Esta linha verifica se o valor ASCII encontrado anteriormente está na range de letras
If xAsc > 64 And xAsc < 91 Then
Qual a real duvida/dificuldade então
Ola sr Reinaldo, desculpa a falta de clareza, >>>'If Mid(L, 296, 6) = "130818" Then<<< esta parte funciona ou só é um comentario?


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 »

No Vba toda linha que inicia com apostrofe " ' " é considerada como comentário ou texto explicativo.
Essa linha está comentada ('), deixei como exemplo para mostrar como será a sintaxe caso deseje verificar uma string(texto) maior com um valor especifico

As duas linhas são apenas comentários, podem ser excluídas sem prejuízo da rotina
'Verifica se o valor da string é o esperado
'If Mid(L, 296, 6) = "130818" Then[/cote]


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 26, 2019 9:43 am No Vba toda linha que inicia com apostrofe " ' " é considerada como comentário ou texto explicativo.
Essa linha está comentada ('), deixei como exemplo para mostrar como será a sintaxe caso deseje verificar uma string(texto) maior com um valor especifico

As duas linhas são apenas comentários, podem ser excluídas sem prejuízo da rotina
'Verifica se o valor da string é o esperado
'If Mid(L, 296, 6) = "130818" Then[/cote]
Olá Sr Reinaldo, muito obrigado, foi o que pensei.
Duvida Resolvida!


fao17
Colaborador
Colaborador
Mensagens: 10
Registrado em: Seg Jun 10, 2019 7:10 pm

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

Mensagem por fao17 »

Boa tarde.

Aproveitando o tópico do colega, estou precisando de algo bem parecido.
No caso do tópico foi utilizado um if para verificar se na posição 393 do aqruivo é uma letra, caso sim a linha é copiada para a planilha.
No meu caso preciso verificar se na posição 296 é o número 130818.
No próprio código tem uma linha marcada como texto (If Mid(L, 296, 6) = "130818" Then) que poderia ser utilizado. Mas quando habilito ela e desabilito as linhas que não preciso (xAsc = Asc(UCase(Mid(L, 393, 1)))
'If xAsc > 64 And xAsc < 91 Then) os dados não vão para a planilha.
Alguém poderia esclarecer o que esta faltando?

Segue o código:

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
Close I
frmmenu.LBLSTATUS.Caption = "FORMATANDO DADOS"


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-RESOLVIDO-

Mensagem por Reinaldo »

Apenas pelo trecho informado da rotina, aparentemente nada direciona ao que foi relatado: "...os dados não vão para a planilha..."
porem como são variáveis utilizadas/referenciadas no trecho "W / Ln / Col / PTI (2 a 5) / PTF (2 a 5)" pode ser algo + abrangente


fao17
Colaborador
Colaborador
Mensagens: 10
Registrado em: Seg Jun 10, 2019 7:10 pm

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

Mensagem por fao17 »

Boa tarde Reinaldo.

O código, planilha e arquivo são os mesmos tópico inicial do colega LuizFeijo.
No código que vc criou a linha é importada para o Excel de acordo com a condição:
xAsc = Asc(UCase(Mid(L, 393, 1)))
If xAsc > 64 And xAsc < 91 Then

Gostaria de saber se é possível realizar a importação dessas linhas somente com a condição:
'If Mid(L, 296, 6) = "130818" Then

Obrigado pela atenção.


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