Notifications
Clear all

Copiar dados de vários arquivos

11 Posts
2 Usuários
0 Reactions
2,033 Visualizações
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Boa noite pessoal,

Em um diretório possuo vários arquivos com os seguintes nomes 0001.xlsb, 0002.xlsb e por aí vai.

Gostaria de abrir o primeiro arquivo, copiar as linhas segundo um critério (está na coluna H), criar um novo arquivo (outro diretório) e colar essas linhas copiadas, fechar o arquivo de onde copiei e fechar novo arquivo criado.
Repetir esse processo para os demais arquivos.

Cada arquivo possui somente uma aba de nome “DDD” e cabeçalho na primeira linha, os dados vão da coluna A até coluna AD

Atualmente faço isso usando fórmulas (com várias funções), sendo que o processo fica muito lento.

Algum forista poderia me orientar com um código vba, sou novato em vba.

Grato pela atenção

 
Postado : 14/03/2017 3:18 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa tarde Squat,

A algum tempo montei algo parecido ao que você precisa, de uma olhada: viewtopic.php?f=10&t=23194#p117160

Qual versão do Office você trabalha, talvez você possa usar o PowerQuery (Nova Consulta) para fazer isso.

att,

 
Postado : 14/03/2017 3:29 pm
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Boa noite Bruno,

Então, vi o post que me indicou, mas o que eu pretendo é abrir o arquivo 0001.xlsb, copiar linhas segundo um critério (coluna H), gerar um novo arquivo (em outro diretório) e colar essas linhas, fechar ambos arquivos.

Repetir o processo para os demais arquivos do diretório de origem.

Vou tentando aqui.

Grato pela atenção.

 
Postado : 14/03/2017 3:45 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite Squat,

No caso o que você diz vai usar uma estrutura similar (principalmente o Loop) ao que montei no outro tópico.

Disponibilize uma planilha de exemplo, posso pensar em alterar o código.

att,

 
Postado : 14/03/2017 4:04 pm
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Bom dia Bruno,

Desculpe a demora em responder, minha net de casa está com problemas e acesso só no trabalho.

Segue o arquivo com o código que estou usando.

Está dando erro na seguinte linha: Workbooks("0001.xlsb").Worksheets("DDD").AutoFilter , field:=8, Criterial:="OK"

Mas meu intuito era abrir o primeiro arquivo, copiar as linhas segundo um critério (está na coluna H), criar um novo arquivo (outro diretório) e colar essas linhas copiadas, fechar o arquivo de onde copiei e fechar novo arquivo criado.
Repetir esse processo para os demais arquivos.

Grato pela atenção.

 
Postado : 15/03/2017 6:49 am
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa tarde Squat,

Nesse seu arquivo não tem uma rotina de repetição, então se funcionasse iria pegar apenas um arquivo.

Em anexo está um arquivo compactado com três planilhas. Para testar você cria uma nova pasta e descarrega os arquivos nela, depois vá no arquivo 'Copiar e Salvar' e rode o código.
Note que na pasta vai ser gerado dois novos arquivos com nome diferente (_H & Número), esses são os arquivos gerados. Para que o diretório tanto da busca das pastas (caminho) quando do destino (destino) seja alterado você deve ir no código e alterar na variável.

O código está no módulo1 e fiz alguns comentários para ajudar o entendimento.

Teste e de retorno.

att,

 
Postado : 15/03/2017 12:32 pm
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Bom dia Bruno,

Primeiramente muito obrigado pelo apoio.

Fiz os testes aqui e o código rodou, só que deu o a seguinte mensagem de erro: "Erro em tempo de execução 9 - Subscrito fora do intervalo"

Isso ocorreu na seguinte linha: "Workbooks(NomePlan).Close False", aí eu desabilitei essa linha e rodou de boa, só não fechou os arquivos criados.

Uma outra pergunta, na linha "ActiveWorkbook.SaveAs Destino & "" & NomePlan & ".xlsx", mudei .xlsx por xlsb e deu o seguinte erro "Erro em tempo de execução 1004", o excel não permite salvar em outra extensão? Pergunto isso, pq trabalho com arquivos com 500.000 linhas e a extensão .xlsb deixa mais leve.

Desculpe pelos questionamentos, estou iniciando em vba.

Grato pela atenção.

 
Postado : 16/03/2017 7:03 am
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa tarde Squat,

O 'Workbooks(NomePlan).Close False' é para ir fechando os arquivos criados, você fez alguma alteração na variável 'NomePlan'?

Sobre salvar em formato binário, altere a linha de salvar o arquivo para essa:

ActiveWorkbook.SaveAs Destino & "" & NomePlan & ".xlsb", FileFormat:=50

Teste as alterações.

att,

 
Postado : 16/03/2017 10:31 am
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Boa tarde Bruno,

Então, não alterei variável "NomePlan" não, só pus o caminho de origem e destino. Código copia, cria os arquivos novos, cola, salva no destino e exibe a MsgBox "Dados Copiados", só não fecha os arquivos criados.

Quanto a alteração para salvar em .xlsb funcionou.

Grato pela atenção.

 
Postado : 16/03/2017 11:21 am
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Squat,

Não tive problemas com o comando de fechar as planilhas geradas, mas no caso fechar planilha é um problema menor. Mais fácil do que ficar filtrando e copiando valores manualmente.

OBS: Não esqueça de marcar o tópico com resolvido.

att,

 
Postado : 16/03/2017 1:48 pm
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Boa tarde Bruno,

Realmente, só fechar os arquivos é o menor dos males.

Obrigado mesmo pela força.

Abçs

 
Postado : 16/03/2017 2:18 pm