Analyst Cave

Nov 24, 2021

ThisWorkbook refere-se à pasta de trabalho na qual o código VBA do Excel está sendo executado. ActiveWorkbook, por outro lado, refere-se à Pasta de Trabalho do Excel que atualmente tem foco, o que significa que é a janela frontal do Excel.

Amavelmente os desenvolvedores de VBA do Excel misturam esses dois tipos comuns de Pasta de Trabalho em VBA. O problema começa a surgir quando você trabalha em várias Pastas de Trabalho do Excel ao mesmo tempo e, por acidente, executa uma macro de uma Pasta de Trabalho enquanto outra Pasta de Trabalho do Excel está ativa no momento. Isto pode ter efeitos desastrosos se você usar diretamente as propriedades Range VBA ou VBA Cell.

Neste artigo deixe-me explicar a diferença entre os objetos ActiveWorkbook VBA do Excel e ThisWorkbook.

ActiveWorkbook

The ActiveWorkbook não é apenas a Pasta de Trabalho visível como muitos pensariam, pois você também pode ter várias Pastas de Trabalho abertas e colocadas lado a lado. No entanto, apenas uma Pasta de Trabalho do Excel é considerada Ativa em qualquer momento no tempo. Ser Ativo é a propriedade mais importante – apenas a janela da Pasta de Trabalho que está selecionada no momento é considerada Ativa. Veja abaixo uma definição precisa

Application.ActiveWorkbook ou ActiveWorkbook no Excel VBA:
Vai retornar o objeto Workbook que representa a pasta de trabalho na janela ativa (a janela no topo). A propriedade Nada retornará se a janela Info ou a janela Clipboard for a janela ativa.

Excel VBA ActiveWorkbook exemplo

'Returns the name of the Active Workbook in Excel VBADebug.Print ActiveWorkbook.Name'Get Sheet1 from the Active WorkbookActiveWorkbook.Sheets("Sheet1")

ThisWorkbook

A propriedade ThisWorkbook é muito mais fácil de entender, pois simplesmente faz referência à Workbook do Excel na qual o código VBA está sendo executado. Para a definição completa veja abaixo:

Aplicação.ThisWorkbook ou ThisWorkbook no Excel VBA:
Vai retornar o objeto Workbook que representa a pasta de trabalho onde o código da macro VBA atual está sendo executado.

Excel VBA ThisWorkbook example

'Returns the name of the Workbook which is executing this MacroDebug.Print ActiveWorkbook.Name'Get Sheet1 from the Workbook executing this MacroActiveWorkbook.Sheets("Sheet1")

ActiveWorkbook vs ThisWorkbook

Se você ainda estiver confuso sobre a diferença entre essas duas propriedades veja abaixo:

Na esquerda a Pasta de Trabalho do Excel é visível e é o aplicativo principal. Neste caso, se você executar uma macro nesta Pasta de Trabalho, a propriedade ActiveWorkbook é a mesma que esta Pasta de Trabalho.

No lado direito a Pasta de Trabalho do Excel não está visível ou não é a aplicação mais importante. Neste caso se você executar uma macro nesta Workbook a propriedade ActiveWorkbook representa a Workbook à esquerda, e ThisWorkbook representa a Workbook à direita.

Espera que isso esteja claro agora!

Conclusões

Agora você pode distinguir entre essas duas propriedades, é importante ter em mente algumas coisas:

  • Diavelmente use ThisWorkbook sobre a mais errada ActiveWorkbook, quando você espera que seu código seja executado na mesma Workbook em que você está trabalhando
  • Use ActiveWorkbook cuidadosamente, pois é uma propriedade top-most, pode nem sempre retornar uma propriedade se outras janelas pop-up do Excel estiverem envolvidas. Embora você possa precisar da propriedade ActiveWorkbook quando estiver trabalhando com AddIns do Excel (que executam código na Pasta de Trabalho Ativa e não no seu AddIn)

Deixe uma resposta

O seu endereço de email não será publicado.