Página 1 de 2
Importar TXT com critério
Enviado: Seg Mar 28, 2016 7:26 am
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.
Desde já agradeço.
Marciel Silva
Re: Importar TXT com critério
Enviado: Seg Mar 28, 2016 9:22 am
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.
Re: Importar TXT com critério
Enviado: Seg Mar 28, 2016 10:17 am
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.
Re: Importar TXT com critério
Enviado: Seg Mar 28, 2016 12:23 pm
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.
Re: Importar TXT com critério
Enviado: Seg Mar 28, 2016 1:24 pm
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.
Re: Importar TXT com critério
Enviado: Seg Mar 28, 2016 2:41 pm
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
Re: Importar TXT com critério
Enviado: Seg Mar 28, 2016 2:54 pm
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.
Re: Importar TXT com critério
Enviado: Seg Mar 28, 2016 3:56 pm
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,
Re: Importar TXT com critério
Enviado: Ter Mar 29, 2016 3:05 pm
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
Re: Importar TXT com critério
Enviado: Ter Mar 29, 2016 3:44 pm
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.