VBA – ActiveWorkbook versus ThisWorkbook
In this Article
Este tutorial abordará a diferença entre os objetos ActiveWorkbook e ThisWorkbook do VBA.
ActiveWorkbook versus ThisWorkbook
É importante saber a diferença entre o ActiveWorkbook e o ThisWorkbook no VBA:
O ActiveWorkbook é a pasta de trabalho que está ativa no momento (semelhante ao ActiveSheet, que é a planilha ativa no momento). ThisWorkbook é a pasta de trabalho em que o código VBA está armazenado. ThisWorkbook nunca será alterado.
ThisWorkbook
Pense em ThisWorkbook como uma variável de objeto que lhe permite fazer referência à pasta de trabalho que contém o código em execução no momento.
Esse código exibirá uma MessageBox com o nome ThisWorkbook:
Sub Mostrar_ThisWorkbook()
MsgBox ThisWorkbook.Name
End Sub
ActiveWorkbook
O ActiveWorkbook é uma variável de objeto que permite fazer referência à pasta de trabalho ativa no momento.
Esse código exibirá uma MessageBox com o nome ActiveWorkbook:
Sub Mostrar_ActiveWorkbook()
MsgBox ActiveWorkbook.Name
End Sub
O VBA Assume o ActiveWorkbook
Ao tentar trabalhar com objetos (por exemplo, planilhas) dentro do ActiveWorkbook, não é necessário indicar explicitamente o objeto ActiveWorkbook. O VBA assumirá que você está se referindo ao ActiveWorkbook.
Assim:
ActiveWorkbook.Sheets("Planilha1").Range("$A$5").Value = 1
É o mesmo que:
Sheets("Planilha1").Range("$A$5").Value = 1
Pastas de Trabalho Novas ou Abertas são Ativas
Sempre que você cria uma nova pasta de trabalho ou abre uma pasta de trabalho, ela se torna “ativa”. Você pode ver por si mesmo com este código que adicionará uma pasta de trabalho e recuperará o nome da nova pasta de trabalho:
Sub Mostrar_ActiveWorkbook_Adicionar()
Workbooks.Add
MsgBox ActiveWorkbook.Name
End Sub
Depois de adicionar ou abrir uma pasta de trabalho, você pode atribuí-la a uma variável usando o objeto ActiveWorkbook. Mostraremos como fazer isso nos exemplos a seguir:
Exemplos de ThisWorkbook e ActiveWorkbook
Alternar a Pasta de Trabalho Ativa
Troque a pasta de trabalho ativa usando o nome da pasta de trabalho:
Workbooks("Pasta1").Activate
Alternar a pasta de trabalho ativa usando um índice como número de ordem da pasta de trabalho (1 é a primeira pasta de trabalho aberta ou criada):
Workbooks(1).Activate
Tornar ThisWorkbook Ativa
Tornar ThisWorkbook (onde o código em execução no momento está armazenado) a ActiveWorkbook:
ThisWorkbook.Activate
Definir ActiveWorkbook como uma Variável
Atribua o ActiveWorkbook a uma variável de objeto da pasta de trabalho:
Dim wb As Workbook
Set wb = ActiveWorkbook
Fechar e Salvar a Pasta de Trabalho Ativa
Fecha e salva o ActiveWorkbook:
ActiveWorkbook.Close SaveChanges:=True
Fechar a Pasta de Trabalho Ativa Sem Salvar
Fecha o ActiveWorkbook sem salvar:
ActiveWorkbook.Close SaveChanges:=False
ActiveWorkbook – Salvar Como
Executa um Salvar Como da pasta de trabalho ativa.
Sub SalvarComosActiveWorkbook()
Dim resultado As Variant
resultado = Application.GetSaveAsFilename(InitialFileName:="", _
FileFilter:="Excel Macro-Enabled Workbook (*.xlsm), *.xlsm,Excel Workbook (*.xlsx), *.xlsx")
If resultado = False Then Exit Sub
ActiveWorkbook.SaveAs resultado
End Sub