0183-Dica VBA: ThisWorkbook, ActiveWorkbook e ActiveSheet

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.

Anúncios

In Excel We Trust

Marcado com: , , ,
Publicado em Nível: Avançado
2 comentários em “0183-Dica VBA: ThisWorkbook, ActiveWorkbook e ActiveSheet
  1. Patrick disse:

    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?

  2. José Adilson do Nascimento disse:

    Transferir dados de uma planilha a outra no VBA.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Visitas dos usuários
  • 2,077,127

Clique para assinar este blog e receber notificações de novos artigos por email.

Junte-se a 1.537 outros seguidores

Aumente sua interação

Siga-nos do twitter (@usuariosdoexcel).

Acesse o nosso fórum e compartilhe as suas dúvidas.

Curta nossa página no Facebook.

Junte-se ao grupo do LinkedIn.

Visite-nos utilizando o seu smartphone ou tablet.

Recomende este Blog
Visualizar notícias
Site monitorado:
Real Time Web Analytics

Clicky

%d blogueiros gostam disto: