Explicação de códig...
 
Notifications
Clear all

Explicação de código

28 Posts
3 Usuários
0 Reactions
4,163 Visualizações
(@wessley)
Posts: 55
Trusted Member
Topic starter
 

Boa noite,

Já faz um tempo que estou tentando extrair dados de um TXT. Eu encontrei esse código que segue em anexo, porém eu gostaria de entender como ele funciona para que eu possa adaptá-lo ao meu TXT.
Se me ajudarem, desde já agradeço.

 
Postado : 29/04/2015 6:47 pm
skuma
(@skuma)
Posts: 18
Active Member
 

Wesley, o que exatamente você precisa? é importar um arquivo TXT para o Excel?

Se sim, segue um modelo que criei, veja se você consegue entender e adaptá-lo para o que você precisa.

Fonte de informação para criar o modelo:
https://social.msdn.microsoft.com/Forums/pt-BR/e92378e5-5457-4893-ae87-8cf9839e6e74/importar-arquivo-txt-para-o-excel-usando-vba?forum=vbapt

Abs.
Gabriel Santos

 
Postado : 29/04/2015 7:09 pm
(@wessley)
Posts: 55
Trusted Member
Topic starter
 

boa noite skuma sim estou querendo importar de um arquivo txt. porem tenho algumas duvidas . Eu criei um if no codigo que vc me passou assim que ele acha alguma palavra ela busca a sequencia que eu quero. Mais como que eu faço assim que ele achar a palavra ele pegue a sequencia que esta na linha de baixo do arquivo txt e jogue na mesma coluna do excel. se nao tiver me ententendo por favor me envie um email [email protected] para eu explicar melhor. ok obrigado.

 
Postado : 29/04/2015 10:26 pm
(@edcronos)
Posts: 1006
Noble Member
 

não uso txt então nunca fiz isso,
pelo visto vc vai ter que esperar o pessoal mais experiente

mas de qualquer forma vai ser meio dificil o pessoal te ajudar apenas com essas informações
crie uma planilha de exemplo

coloque como os dados devem aparecer "manualmente mesmo"
e coloque um arquivo txt de exemplo de como os dados estão

isso vai agilizar a ajuda
exieste varias maneiras de se procurar e separar textos, mas sem saber como eles estão distribuídos fica dficil

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 01/05/2015 9:26 am
(@wessley)
Posts: 55
Trusted Member
Topic starter
 

Boa tarde!
Segue em anexo a planilha e o arquivo que eu desejo importar para o excel. Eu fiz essa planilha ele funciona! Porem ela é muito demorada eu queria um codigo que importasse direto do txt. Para o excel para que a importaçao seja bem mais rapida.

 
Postado : 01/05/2015 2:03 pm
(@edcronos)
Posts: 1006
Noble Member
 

cara vai ser meio dificil hem
mas poderia pelo menor ter inserido parte dos dados para se fazer uma correlação

os nomes não são todos compatíveis, e não tem todos eu acho
na planilha na primeira linha coloque os campos com dados reais ao do txt

mesmo pq para se fazer uma busca no texto e pegar dados correspondentes vão ter que ser iguais
uf <> est
codigo postal <> cep
vc acha que a macro vai fazer correlação por si mesmo ?
então coloque em outra linha exatamente como está escrito no txt

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 01/05/2015 5:25 pm
(@wessley)
Posts: 55
Trusted Member
Topic starter
 

boa noite. o skuma me enviou uma planilha que le o arquivo txt e importa dados porem estou com dificuldades para adaptalo ao meu txt. A planilha que eu fiz e que esta em anexo a faz o que eu preciso porem o processo fica muito demorado. Estou querendo um codigo que leia o arquivo txt e vem me trazendo os campos que eu preciso. =/ obrigado pela atençao

 
Postado : 01/05/2015 8:30 pm
(@edcronos)
Posts: 1006
Noble Member
 

certo,
vc falou os campos que vc precisa "DO TXT"
quais são esses campos?
os nomes da planilha e do txt não são compatíveis

se vc já tem um aquivo que faz oq vc quer , mas demora
indique para que se veja oq pode ser melhorado

por mais que a coisa seja simples ninguem quer ficar procurando e decifrando oq vai fazer oq e oq vai para onde
se vc tem preguiça de escrever os textos do txt na planilha manualmente para se ter a base do que é para fazer
como vai querer que alguem tenha disposição de ficar caçando a logica do que vc quer ?

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 02/05/2015 9:23 am
(@wessley)
Posts: 55
Trusted Member
Topic starter
 

Ola vc abriu a planilha que eu enviei se vc puder mudar o diretório do vba a onde vc salvou a txt e executar a macro de filtro ela vai importar as informacoes que eu preciso porem esse processo é meio demorado por causa do geito que eu fiz eu so quero que ela seja mais rapida. Se vc puder me mandar um email [email protected] para eu explicar o que vc esta querendo saber seria melhor pra vc e pra mim entender. Pode ser ?

 
Postado : 02/05/2015 1:51 pm
(@edcronos)
Posts: 1006
Noble Member
 

aqui não demorou não, levou menos da metade de 1 segundo
e se está demorando aí e vc precisa de mais velocidade, verifique outros pontos, processador, memoria, versão de office, programas rodando junto

e eu pedi para simplificar achar na planilha cada campo que vai ser lido
pq seguir um codigo que faz tudo de maneira individual não dá

eu ia tentar fazer por procura de texto
comparar o texto da primeira linha com o texto do txt e dentro de um array

mas cara seria melhor somente para vc, como eu falei não uso txt,
eu teria que aprender para poder te ajudar

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 02/05/2015 2:46 pm
(@wessley)
Posts: 55
Trusted Member
Topic starter
 

Serio que nao demoro quais sao as configuracoes do seu pc e qual é o seu office pra ver se o problema esta na minha maquina ?

 
Postado : 02/05/2015 3:37 pm
(@edcronos)
Posts: 1006
Noble Member
 

i3 3240 com o Hyperthreading desativado
8gb de memoria "mas meu uso nunca passou da metade disso"
2010 32bit

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 02/05/2015 3:43 pm
(@wessley)
Posts: 55
Trusted Member
Topic starter
 

ok desde ja obrigado pela atençao vou pesquisar mais pra ver se eu consigo.

 
Postado : 02/05/2015 4:31 pm
(@edcronos)
Posts: 1006
Noble Member
 

oque pode estar deixando a macro lenta
formatação
formulas na planilha
processos paralelos

a macro poderia sim ser melhorada
tirando os select
colocar as formulas em um array para então colar na planilha

mas como falei, segui a logica de uma macro não é muito convidativo

mas de qualquer forma vou tentar dar uma melhorada
só não prometo nada

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 02/05/2015 6:36 pm
(@edcronos)
Posts: 1006
Noble Member
 

tem que terminar de ajustar as linhas de comando

coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 4, 1), 25, 10))

no caso adicionar em um array apenas os valores e apenas uma verificação de posição sem encher a planilha de formulas

como não vai ter formulas na plan fica mais rapido
e é só fazer um loop
alem de que vai mandar os valores diretos para a planilha notas fiscais

onde tem
.Trim(Mid(Cells((L - 4) + 8,
tem que deixar
.Trim(Mid(Cells((L - 4) + 8,1),

isso vai ler o valor na planilha e adicionar em uma coluna no array
depois é só adicionar o array na planilha

Sheets("DADOS").Select
    Dim coluno(1 To 1, 1 To 30)
    With Application.WorksheetFunction
    L = 4
    If .Trim(Mid(Cells(L, 1), 9, 15)) = "Estabelecimento" Then
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 4, 1), 25, 10))

    coluno(L2, 2) = .Trim(Mid(Cells((L - 4) + 5, 1), 25, 10)) 'tem que completar linha por linha 
    coluno(L2, 3) = .Trim(Mid(Cells((L - 4) + 6,1), 25, 10))

    coluno(L2, 4) = .Trim(Mid(Cells((L - 4) + 8, 25, 20)))   '.Trim(Mid(Cells((L - 4) + 8,1),25,10))
    coluno(L2, 5) = .Trim(Mid(Cells((L - 4) + 11, 25, 20)))
    coluno(L2, 6) = .Trim(Mid(Cells((L - 4) + 26, 25, 100)))

    coluno(L2, 7) = .Trim(Mid(Cells((L - 4) + 9, 25, 20)))
 ' coluno(L2, 7) tem que trocar os 1 por uma numeração sequencial, isso corresponde as colunas

    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 16, 64, 20)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 17, 64, 20)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 23, 64, 20)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 25, 71, 14)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 4, 101, 1000)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 5, 101, 1000)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 8, 101, 1000)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 10, 101, 1000)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 11, 101, 1000)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 13, 101, 1000)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 16, 101, 1000)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 18, 101, 1000)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 19, 101, 1000)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 20, 101, 1000)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 22, 101, 1000)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 23, 101, 1000)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 33, 22, 17)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 34, 10, 10)))
    coluno(L2, 1) = .Trim(Mid(Cells((L - 4) + 34, 25, 15)))
    End If

agoraé com vc
vc decide se vale a pena

com busca de texto seria mais facil
mas
boa sorte aí

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 02/05/2015 10:06 pm
Página 1 / 2