Este tutorial discutirá a diferença entre o VBA ActiveWorkbook e ThisWorkbook.
ActiveWorkbook vs. ThisWorkbook
É importante saber a diferença entre ActiveWorkbook e ThisWorkbook no VBA:
A ActiveWorkbook é a pasta de trabalho atualmente ativa (semelhante a como ActiveSheet é a planilha atualmente ativa). Esta pasta de trabalho é a pasta de trabalho onde o código VBA é armazenado. Este livro de trabalho nunca mudará.
ThisWorkbook
Pense em ThisWorkbook como uma variável de objeto que permite fazer referência à pasta de trabalho que contém o código em execução no momento.
Este código exibirá uma MessageBox com o nome ThisWorkbook:
123 | Sub Show_ThisWorkbook ()MsgBox ThisWorkbook.NameEnd Sub |
ActiveWorkbook
A ActiveWorkbook é uma variável de objeto que permite fazer referência à pasta de trabalho atualmente ativa.
Este código exibirá uma MessageBox com o nome ActiveWorkbook:
123 | Sub Show_ActiveWorkbook ()MsgBox ActiveWorkbook.NameEnd Sub |
VBA assume ActiveWorkbook
Ao tentar trabalhar com objetos (por exemplo, Planilhas) dentro do ActiveWorkbook, você não precisa declarar explicitamente o objeto ActiveWorkbook. O VBA presumirá que você está se referindo ao ActiveWorkbook.
Então, é isso:
1 | ActiveWorkbook.Sheets ("Sheet1"). Range ("$ A $ 5"). Value = 1 |
É o mesmo que este:
1 | Folhas ("Folha1"). Intervalo ("$ A $ 5"). Valor = 1 |
Pastas de trabalho novas ou abertas estã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:
1234 | Sub Show_ActiveWorkbook_Add ()Workbooks.AddMsgBox ActiveWorkbook.NameEnd Sub |
Depois de adicionar ou abrir uma pasta de trabalho, você pode atribuí-la a uma variável usando o objeto ActiveWorkbook. Mostraremos como nos exemplos abaixo:
Exemplos de ThisWorkbook e ActiveWorkbook
Alternar pasta de trabalho ativa
Alterne a pasta de trabalho ativa usando o nome da pasta de trabalho:
1 | Pastas de trabalho ("Livro1"). Ative |
Alterne a pasta de trabalho ativa usando o número de pedido da planilha (1 é a primeira planilha em uma pasta de trabalho)
1 | Pastas de trabalho (1). Ativar |
Tornar este livro ativo
Torne ThisWorkbook (onde o código atualmente em execução está armazenado) o ActiveWorkbook:
1 | ThisWorkbook.Activate |
Definir ActiveWorkbook para uma variável
Atribua o ActiveWorkbook a uma variável de objeto de pasta de trabalho:
12 | Dim wb como pasta de trabalhoDefinir wb = ActiveWorkbook |
Fechar e salvar a pasta de trabalho ativa
Fecha e salva o ActiveWorkbook:
1 | ActiveWorkbook.Close SaveChanges: = True |
Feche a pasta de trabalho ativa sem salvar
Fecha o ActiveWorkbook sem salvar:
1 | ActiveWorkbook.Close SaveChanges: = False |
ActiveWorkbook - Salvar como
Executa um Salvar como da pasta de trabalho ativa.
123456789 | Sub SaveAsActiveWorkbook ()Resultado não ofuscante como varianteresult = Application.GetSaveAsFilename (InitialFileName: = "", _FileFilter: = "Pasta de trabalho habilitada para macro do Excel (* .xlsm), * .xlsm, Pasta de trabalho do Excel (* .xlsx), * .xlsx")Se resultado = Falso, então retornaResultado de ActiveWorkbook.SaveAsEnd Sub |