VBA – Trabalhando com Pastas de Trabalho (Objeto Workbook)
In this Article
Este guia irá introduzi-lo a trabalhar com o Objeto Workbook no VBA.
O Objeto Workbook
Primeiro, para interagir com o pastas de trabalho (workbooks) no VBA, você precisa entender o Objeto Workbook.
Com o objeto workbook, você pode referenciar pastas de trabalho pelo seus nomes, como no exemplo abaixo:
Workbooks("Pasta2.xlsm").Activate
Entretanto, este código irá funcionar apenas se a pasta de trabalho estiver aberta. Se a pasta de trabalho estiver fechada, você precisará fornecer o caminho completo. Exemplo:
Workbooks.Open ("C:\Usuários\JoãoPC2\Downloads\Pasta2.xlsm")
Ao invés de digitar o caminho completo, se a pasta de trabalho desejada estiver no mesmo diretório que a pasta de trabalho onde seu código está sendo executado, você pode também utilizar a linha código abaixo para abrir a pasta de trabalho:
Workbooks.Open (ThisWorkbook.Path & "\Pasta2.xlsm")
O exemplo acima faz uso do objeto ThisWorkbook que iremos discutir na próxima secção.
Número do Índice da Pasta de Trabalho (Workbook Index Number)
Por fim, você pode referenciar pastas de trabalho através de seus “Número de Índice”. O número de índice de uma pasta de trabalho corresponde à ordem na qual a pasta de trabalho foi aberta (tecnicamente, é a posição da pasta de trabalho na Coleção Workbooks).
Workbooks(1).Activate
Isto é especialmente útil caso você queira fazer algo como fechar a primeiro (ou a última, por exemplo) pasta de trabalho aberta.
Ativar Workbook, ActiveWorkbook e ThisWorkbook
Se uma pasta de trabalho NÃO ESTÁ ATIVA, você pode acessar os objetos dessa pasta de trabalho da seguinte forma:
Workbooks("Pasta2.xlsm").Sheets("Planilha1").Range("A1").value = 1
Entretanto, se a pasta de trabalho estiver Ativa, você pode omitir a referência ao objeto Workbook:
Sheets("Planilha1").Range("A1").value = 1
E se você quiser interagir com a planilha ativa da pasta de trabalho, você pode também omitir o objeto Sheets (Planilhas):
Range("A1").value = 1
Ativando Uma Pasta de Trabalho (Workbook)
Para Ativar uma pasta de trabalho, use o Método Activate.
Workbooks("Pasta2.xlsm").Activate
Agora você pode interagir com os objetos do pasta de trabalho “Pasta2” sem explicitamente referenciar o nome dela.
ActiveWorkbook
O objeto ActiveWorkbook sempre irá fazer referência à pasta de trabalho ativa. Isto é útil caso você queira atribuir o ActiveWorkbook a uma variável para usar posteriormente no seu código
Dim wb As Workbook
Set wb = ActiveWorkbook
ThisWorkbook
O objeto ThisWorkbook sempre irá fazer referência à pasta de trabalho onde o código está sendo executado. Para Ativar o ThisWorkbook, use a seguinte linha de código:
ThisWorkbook.Activate
Abrir um Workbook (Pasta de Trabalho)
Para abrir uma pasta de trabalho, use o Método Open:
Workbooks.Open ("C:\Usuários\JoãoPC2\Downloads\Pasta2.xlsm")
A recém-aberta pasta de trabalho sempre se tornará o ActiveWorkbook, permitindo-lhe interagir com ela facilmente.
ActiveWorkbook.Save
O Método Open tem vários outros argumentos, permitindo-lhe, por exemplo, abrir uma pasta de trabalho em modo somente leitura, abrir uma pasta de trabalho protegida por senha, entre outras possibilidades. Isto é detalhado aqui em nosso artigo Abrindo / Fechando Pastas de Trabalho.
Abrir e Atribuir à Variável
Você pode também abrir uma pasta de trabalho e atribuí-la a uma variável ao mesmo tempo:
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Usuários\JoãoPC2\Downloads\Pasta2.xlsm")
Caixa de Diálogo Abrir Arquivo
Você pode também acionar a Caixa de Diálogo Abrir Arquivo como abaixo:
Sub AbrirPastaDeTrabalho()
Dim strArquivo As String
strArquivo = Application.GetOpenFilename()
Workbooks.Open (strArquivo )
End Sub
Criar Nova (Adicionar) Pasta de Trabalho
Esta linha de código irá criar uma Nova Pasta de Trabalho:
Workbooks.Add
A nova pasta de trabalho agora se torna o ActiveWorkbook, lhe permitindo interagir com ela (exemplo: salvar a nova pasta de trabalho).
Adicionar a Nova Pasta de Trabalho à Variável
Você também pode adicionar uma nova pasta de trabalho diretamente à uma variável:
Dim wb As Workbook
Set wb = Workbooks.Add
Fechar uma Pasta de Trabalho
Fechar & Salvar
Para fechar uma pasta de trabalho e efetuar o salvamento, utilize o Método Close com o parâmetro SaveChanges definido com TRUE:
ActiveWorkbook.Close SaveChanges:=True
Fechar sem Salvar
Para fechar sem salvar, defina o parâmetro SaveChanges como FALSE:
ActiveWorkbook.Close SaveChanges:=False
Salvar Como
O Método SaveAs é utilizado para Salvar Como uma pasta de trabalho.
Para salvar a pasta de trabalho com um novo nome, no mesmo diretório, você pode simplesmente utilizar utilizar o código abaixo:
ActiveWorkbook.SaveAs "NomeExemplo"
Onde “NomeExemplo” será o nome do novo arquivo.
Para salvar a pasta de trabalho em um novo diretório, com uma extensão de arquivo específica, basta especificar o novo diretório e o nome do arquivo:
ActiveWorkbook.SaveAs "C:\Usuários\JoãoPC2\Downloads\NomeExemplo.xlsm"
Outros Exemplo de Interação VBA com Pastas de Trabalho
Workbook Name
Para obter o nome de uma pasta de trabalho:
MsgBox ActiveWorkbook.Name
Proteger Pasta de Trabalho
Para proteger de uma eventual edição a estrutura da pasta de trabalho, você pode utilizar o Método Protect (senha é opcional):
Workbooks("pasta1.xlsm").Protect "SuaSenhaAqui"
Para desproteger a pasta de trabalho, use o Método UnProtect:
Workbooks("pasta1.xlsm").Unprotect "SuaSenhaAqui"
Loop Através de Todas as Pasta de Trabalho Abertas
Para percorrer (loop) através de todas as pastas de trabalho abertas:
Sub LoopAtravesWorkbooks()
Dim wb As Workbook
For Each wb In Workbooks
MsgBox wb.Name
Next wb
End Sub
Evento Open (Abrir) da Pasta de Trabalho
Como o Workbook Open Event, você pode executar um código sempre que uma pasta de trabalho específica for aberta.
Coloque o procedimento abaixo no módulo de sua pasta de trabalho chamado “EstaPastaDeTrabalho”:
Private Sub Workbook_Open()
Sheets("Planilha1").Activate
End Sub
Este procedimento irá ativar a Planilha1 toda vez que a pasta de trabalho for aberta.