Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Importar TXT com critério
-
- Colaborador
- Mensagens: 98
- Registrado em: Qui Nov 01, 2012 2:37 pm
Importar TXT com critério
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. Desde já agradeço.
Marciel Silva
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. Desde já agradeço.
Marciel Silva
- Mikel Silveira Fraga
- Jedi
- Mensagens: 1173
- Registrado em: Sex Mai 27, 2011 3:27 pm
- Localização: Governador Valadares - MG
- Contato:
Re: Importar TXT com critério
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.
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.
-
- Colaborador
- Mensagens: 98
- Registrado em: Qui Nov 01, 2012 2:37 pm
Re: Importar TXT com critério
Mikel, bom dia!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?
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.
- Mikel Silveira Fraga
- Jedi
- Mensagens: 1173
- Registrado em: Sex Mai 27, 2011 3:27 pm
- Localização: Governador Valadares - MG
- Contato:
Re: Importar TXT com critério
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:
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.
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
VBA – LENDO UM ARQUIVO TEXTO LINHA A LINHA (SEM FILESYSTEMOBJECT)
Espero que esse código lhe ajude.
Abraços e excelente semana.
-
- Colaborador
- Mensagens: 98
- Registrado em: Qui Nov 01, 2012 2:37 pm
Re: Importar TXT com critério
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.
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.
-
- Colaborador
- Mensagens: 98
- Registrado em: Qui Nov 01, 2012 2:37 pm
Re: Importar TXT com critério
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
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
- Mikel Silveira Fraga
- Jedi
- Mensagens: 1173
- Registrado em: Sex Mai 27, 2011 3:27 pm
- Localização: Governador Valadares - MG
- Contato:
Re: Importar TXT com critério
Marciel, boa tarde.
Vamos responder as suas respostas:
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.
Faça os testes e tente acertar os códigos.
Abraços.
Vamos responder as suas respostas:
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.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" ?
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.
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.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
Faça os testes e tente acertar os códigos.
Abraços.
-
- Colaborador
- Mensagens: 98
- Registrado em: Qui Nov 01, 2012 2:37 pm
Re: Importar TXT com critério
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,
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,
-
- Colaborador
- Mensagens: 98
- Registrado em: Qui Nov 01, 2012 2:37 pm
Re: Importar TXT com critério
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:
Abraços
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:
Desde já obrigado!!!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.
Abraços
- Mikel Silveira Fraga
- Jedi
- Mensagens: 1173
- Registrado em: Sex Mai 27, 2011 3:27 pm
- Localização: Governador Valadares - MG
- Contato:
Re: Importar TXT com critério
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.
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.