Por padrão o VBA irá executar as sua ações na planilha ativa.
Sub LimparIntervalo() [A1:A10].ClearFormats [B1:B10].ClearContents End Sub
Num código como este, serão eliminados os formatos e valores dos respectivos intervalos na planilha ativa do arquivo cuja janela esteja ativa.
A questão se torna muito importante, naqueles códigos em que são manipuladas diferentes planilhas e arquivos.
Todo o tempo temos que informar qual objeto Workbook ou Worksheet deve ser modificado.
Para facilitar essas atribuições, existem três propriedades importantes:
- ThisWorkbook = Referência para o arquivo que contém as macros.
- ActiveWorkbook = Referência para o arquivo recém aberto, ou aquele cuja janela foi mais recentemente ativada.
- ActiveSheet = Referência para a planilha ativa do arquivo ativo (ActiveWorkbook).
Imaginem uma situação na qual durante a execução de uma macro é aberto um arquivo que contém um planilha chamada “Dados”, a qual possui informações armazenadas no intervalo [A1:J3275], sendo a primeira linha reservada ao cabeçalho.
O objetivo do código é transferir os dados do arquivo aberto para o arquivo que contém a macro numa planilha também chamada “Dados” na primeira linha vazia.
Numa situação como essa é fundamental realizar as atribuições de forma correta para obtermos o resultado desejado. Linhas essenciais neste tipo de situação:
'Definir a planilha que irá receber os dados importados Set wsDest = ThisWorkbook.Sheets("Dados")
Uma atribuição como a citada acima não irá gerar dubiedades no código. toda vez que wsDest for referenciada já está definido que é uma planilha do arquivo que contém a macro.
'Definir a planilha que contém os dados que serão copiados Set wsOrig = ActiveWorkbook.Sheets("Dados")
Essa linha deve vir logo após a abertura do arquivo que contém as informações, para assegurarmos que estamos atribuindo para wsOrig a planilha adequada. Esse detalhe é sutil, mas importante. Muitos usuários trabalham simultaneamente com diversos arquivos abertos, assim como alguns códigos podem exigir que vários arquivos sejam manipulados durante sua execução.
'Definir a primeira linha vazia da coluna A da planilha wsDest wsDestRow = wsDest.Cells(Rows.Count,"A").End(xlUp).Offset(1,0).Row
Se não for explicitado wsDest como a planilha foco, será obtida a última linha da planilha ativa (ActiveSheet). Isso poderá acarretar vários problemas durante a consolidação, sendo a perda de dados um dos mais importantes.
'Copiar os dados entre as planilhas wsOrig.[A2:J3275].Copy wsDest.Cells(wsDestRow,"A")
Realizadas adequadamente as etapas anteriores, podemos realizar a transferência de informações entre os dois arquivos de forma simples e direta, buscando os dados em wsOrig e copiando-os na primeira célula vazia da coluna A da planilha wsDest.
Resumindo: Não há nenhuma complexidade em realizar as etapas descritas acima. Trata-se de comandos de sintaxe simples e de rápida execução. Porém se não atentarmos para detalhes como esses, podemos ter algumas surpresas desagradáveis ou perdermos um tempo precioso para localizar a fonte dos erros gerados.
Olá tudo bem? Tem como ativar um arquivo.xls que está fechado e manipula-lo (copiar valores, células, planilhas, alterar dados nele mesmo) utilizando as funções que você mencionou?
Transferir dados de uma planilha a outra no VBA.