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

Importar TXT com critério

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Marciel Silva
Colaborador
Colaborador
Mensagens: 98
Registrado em: Qui Nov 01, 2012 2:37 pm

Importar TXT com critério

Mensagem por Marciel Silva »

Senhores, bom dia!

Mais uma vez precisando da ajuda de vocês.

Toda batida de ponto é registrado em um .txt
No excel tenho o número do funcionário e os dias do mês.

Ao abrir o txt, na coluna 11 até a 19 tem a data da batida.
Os últimos 12 números são os dos funcionários.

Preciso que a macro encontre por exemplo 000000001123 no txt, vai na planilha e no dia 08/03/2016 (coluna 11 do txt) e coloque um "T" na linha.
Segue exemplo simples na planilha.
Planilha_230316.zip
(3.79 KiB) Baixado 418 vezes
Desde já agradeço.

Marciel Silva


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
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Importar TXT com critério

Mensagem por Mikel Silveira Fraga »

Marciel, bom dia.

Baixei seu modelo e entendi o que você deseja fazer, mas não entendi muita coisa do Txt que você enviou, já que aparentemente existe o registro de vários funcionários na mesma linha.

Poderia dar mais detalhes sobre o layout desse arquivo texto? Dessa forma seria mais fácil de tentar lhe ajudar.

Outra coisa, observei que na planilha, o registro dos funcionários é composto de 12 caracteres: "000000001273". No arquivo texto, irei encontrar exatamente essa mesma sequência?

Aguardo retorno.


Marciel Silva
Colaborador
Colaborador
Mensagens: 98
Registrado em: Qui Nov 01, 2012 2:37 pm

Re: Importar TXT com critério

Mensagem por Marciel Silva »

Mikel Silveira Fraga escreveu:Marciel, bom dia.

Poderia dar mais detalhes sobre o layout desse arquivo texto? Dessa forma seria mais fácil de tentar lhe ajudar.

Outra coisa, observei que na planilha, o registro dos funcionários é composto de 12 caracteres: "000000001273". No arquivo texto, irei encontrar exatamente essa mesma sequência?
Mikel, bom dia!
Muito obrigado pelo retorno.

O TXT da 3ª linha para baixo tem os seguintes dados:
0000392523080320161738000000001273
0000392533080320161745000000001279
0000392543080320161746000000001309

Do 11º ao 18° (08032016) é a data da batida do ponto.
Do 23° até o último (000000001273) é o número do funcionário.
Todos terão 12 caracteres e terão essa mesma ordem.
A macro irá pegar na planilha esses 12 caracteres e procurar no txt. Encontrou? Colocar um "T" na planilha no dia 08032016 e assim sucessivamente.
Todos os dias irei trocar o txt para a macro puxar a batida do ponto.
Caso você tenha uma ideia melhor e mais simples... fique a vontade!

Espero ter explicado melhor.

Desde já muito obrigado.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Importar TXT com critério

Mensagem por Mikel Silveira Fraga »

Marciel, boa tarde.

Cara, assim ficou mais fácil de entender a estrutura, mas esse arquivo texto vem de uma forma muito complicada. Normalmente, os arquivos possuem várias linhas, mas este esta com toda a informação gravada em uma única linha.

Por este motivo, tive que montar um código que iria verifica se a sequencia de Data, Hora e Matricula existia. Veja o código abaixo:

Código: Selecionar todos

Public Sub LeArquivoTexto()
    Dim Arquivo As Integer
    Dim CaminhoArquivo As String
    Dim TextoArquivo As String
    Dim iLinha, iColuna As Integer
    Dim strMatricula, strData As String
 
    'Configura a leitura do arquivo
    Arquivo = FreeFile
    
    'Endereço fixo, mas uma opção seria o comando abaixo:
    'CaminhoArquivo = Application.GetOpenFilename("Arquivos Textos, *.txt")
    CaminhoArquivo = ThisWorkbook.Path & "\Ponto 080316.txt"
            
    'Abre o arquivo para leitura
    Open CaminhoArquivo For Input As Arquivo
    
    'Lê o conteúdo do arquivo linha a linha
    Do While Not EOF(Arquivo)
        Line Input #Arquivo, TextoArquivo
    Loop
    
    'Fecha o arquivo
    Close Arquivo
    
    For iLinha = 3 To 10
    
        strMatricula = VBA.Format(Plan1.Cells(iLinha, 1).Value, "000000000000")
        
        For iColuna = 2 To 32
    
            strData = VBA.Replace(VBA.CDate(Plan1.Cells(2, iColuna).Value), "/", "")
        
            If TextoArquivo Like "*" & strData & "????" & strMatricula & "*" Then
                Plan1.Cells(iLinha, iColuna).Value = "T"
            End If
        
        Next iColuna
        
    Next iLinha
End Sub
Para montar esse código, utilizei um artigo publicado pelo Tomás em seu Blog:
VBA – LENDO UM ARQUIVO TEXTO LINHA A LINHA (SEM FILESYSTEMOBJECT)

Espero que esse código lhe ajude.

Abraços e excelente semana.


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.


Marciel Silva
Colaborador
Colaborador
Mensagens: 98
Registrado em: Qui Nov 01, 2012 2:37 pm

Re: Importar TXT com critério

Mensagem por Marciel Silva »

Mikel, boa tarde!

Vou tentar esse código.

É estranho que para você o texto esteja saindo em uma linha.
Para mim ele sai conforme eu colei com exemplo para você.
0000392523080320161738000000001273
0000392533080320161745000000001279
0000392543080320161746000000001309

De qualquer forma vou testar o código e te dou um parecer.

Desde já meu muito obrigado.

Abraços.


Marciel Silva
Colaborador
Colaborador
Mensagens: 98
Registrado em: Qui Nov 01, 2012 2:37 pm

Re: Importar TXT com critério

Mensagem por Marciel Silva »

Mikel, boa tarde!

Fiz o teste e funcionou exatamente o que preciso.

Agora só preciso que esclareça algumas dúvidas:

1- Se por ventura eu quiser jogar uns 5 TXT em uma pasta para que ele pegue tudo de uma vez... é possível alterando a linha "CaminhoArquivo = ThisWorkbook.Path & "\Ponto 080316.txt" ?

2- Estou inserindo esse código em outra planilha. Coloco ele em um módulo e altero o nome da Plan1 e o número de linha e coluna?
For iLinha = 3 To 10 For iColuna = 2 To 32

Muito obrigado pela ajuda!

Abraços


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Importar TXT com critério

Mensagem por Mikel Silveira Fraga »

Marciel, boa tarde.

Vamos responder as suas respostas:
1- Se por ventura eu quiser jogar uns 5 TXT em uma pasta para que ele pegue tudo de uma vez... é possível alterando a linha "CaminhoArquivo = ThisWorkbook.Path & "\Ponto 080316.txt" ?
Para utilizar múltiplos arquivos, é possível utilizar a biblioteca Microsoft Scripting Runtime. Com ela, é possível montar uma rotina que avalie todos os arquivos existentes em um diretório e criar um laço For Each com os objetos Files da biblioteca.

Outra forma de se fazer isso é utilizando a função GetOpenFileName, atribuir o parâmetro MultiSelect da função. Na sequência, os nomes dos arquivos seriam atribuídos a uma Array e utilizada para explorar todos os arquivos textos.
2- Estou inserindo esse código em outra planilha. Coloco ele em um módulo e altero o nome da Plan1 e o número de linha e coluna?
For iLinha = 3 To 10 For iColuna = 2 To 32
Exatamente. Todos os valores utilizados no comando acima, foram assim definidos para atender ao Layout que você enviou. Já no caso do código esta sendo transportado para outro arquivo, é necessário que esses comandos sejam adaptados, exatamente nos pontos que você informou.

Faça os testes e tente acertar os códigos.

Abraços.


Marciel Silva
Colaborador
Colaborador
Mensagens: 98
Registrado em: Qui Nov 01, 2012 2:37 pm

Re: Importar TXT com critério

Mensagem por Marciel Silva »

Mikel.... o negócio está mais difícil do que eu imaginava... rsrsrs

Tentei adaptar na minha planilha mais sem sucesso.

A planilha é enorme para eu postar aqui (17mb).
Não sei onde estou pecando ao transferir o código.

Vou ver se consigo simplificar ela para enviar para você.

Obrigado!

Att,


Marciel Silva
Colaborador
Colaborador
Mensagens: 98
Registrado em: Qui Nov 01, 2012 2:37 pm

Re: Importar TXT com critério

Mensagem por Marciel Silva »

Mikel, boa tarde!

Consegui adaptar o código na minha planilha.
Porém tive que deixar a planilha com o mesmo layout da que eu mandei por exemplo para funcionar.
O que deixei de alterar?
Queria que começasse na linha 9 até a 50 e da coluna 14 até 40 (exemplo).

Outra coisa:
Abusando da sua boa vontade, como faço:
1- Para utilizar múltiplos arquivos, é possível utilizar a biblioteca Microsoft Scripting Runtime. Com ela, é possível montar uma rotina que avalie todos os arquivos existentes em um diretório e criar um laço For Each com os objetos Files da biblioteca.
Desde já obrigado!!!

Abraços


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Importar TXT com critério

Mensagem por Mikel Silveira Fraga »

Marciel, boa tarde.

Conforme conversa via Skype, essa biblioteca é utilizada para criar objetos que realizam manipulação de Arquivos de Sistema (FileSystemObject), como Diretórios (FolderObjects) e Arquivos (Files).

Seguem alguns links de referência do uso desta biblioteca:
- Excel: Microsoft Scripting Runtime
- VBA – LISTAR ARQUIVOS DE UM DIRETÓRIO
- Usando o FileSystemObject - FSO - Tratando arquivos e diretórios

Todos esses links possuem excelentes exemplos que você pode seguir e adaptar.

Se tiver alguma dificuldade, é só entrar em contato.

Abraços.


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