Planilhas VBA – O Guia Definitivo
In this Article
Este é o guia definitivo para trabalhar com planilhas do Excel em VBA.
Na parte inferior deste guia, criamos uma folha de dicas de comandos comuns para trabalhar com planilhas.
Sheets versus Worksheets
Há duas maneiras de fazer referência a planilhas usando o VBA. A primeira é com o objeto Sheets:
Sheets("Planilha1").Activate
A outra é com o objeto Worksheets:
Worksheets("Planilha1").Activate
em 99% das vezes, esses dois objetos são idênticos. De fato, se você pesquisou on-line por exemplos de código VBA, provavelmente viu os dois objetos sendo usados. Aqui está a diferença:
A coleção Sheets contém planilhas e planilhas de gráficos.
Portanto, use Sheets se quiser incluir planilhas regulares E planilhas de gráficos. Use Worksheets se quiser excluir planilhas de gráficos. No restante deste guia, usaremos Sheets e Worksheets de forma intercambiável.
Fazendo Referência a Planilhas
Há várias maneiras diferentes de fazer referência a objetos Sheets:
- ActiveSheet
- Nome da guia da planilha
- Número de índice da planilha
- Nome do código da planilha
ActiveSheet
A ActiveSheet é a planilha que está ativa no momento. Em outras palavras, se você pausou o código e olhou para o Excel, essa é a planilha que está visível. O exemplo de código abaixo exibirá uma MessageBox com o nome ActiveSheet.
MsgBox ActiveSheet.Name
Nome da Guia da Planilha
Você provavelmente está mais familiarizado com a referência a planilhas pelo nome da guia:
Sheets("NomeDaGuia").Activate
Esse é o nome da planilha que fica visível para os usuários do Excel. Insira-o no objeto sheets, como uma cadeia de texto, entre aspas.
Número de Índice da Planilha
O número de índice da planilha é a posição da planilha na pasta de trabalho. 1 é a primeira planilha. 2 é a segunda planilha etc:
Sheets(1).Activate
Número de Índice da Planilha – Última Planilha na Pasta de Trabalho
Para fazer referência à última planilha da pasta de trabalho, use Sheets.Count para obter o último número de índice e ativar essa planilha:
Sheets(Sheets.Count).Activate
Nome do Código da Planilha
O nome de código da planilha é o nome do objeto no VBA:
CodeName.Activate
Referenciar Planilhas em Outras Pastas de Trabalho
Também é fácil fazer referência a planilhas em outras pastas de trabalho. Para isso, você precisa usar o objeto Workbooks:
Workbooks("VBA_Examplos.xlsm").Worksheets("Planilha1").Activate
Importante: A pasta de trabalho deve estar aberta para que você possa fazer referência a suas planilhas.
Ativar versus Selecionar planilha
Em outro artigo, discutiremos tudo sobre a ativação e a seleção de planilhas. A versão resumida é a seguinte:
Quando você ativa uma planilha, ela se torna a ActiveSheet. Essa é a planilha que você veria se olhasse para o programa Excel. Somente uma planilha pode ser ativada por vez.
Ativar uma Planilha
Sheets("Planilha1").Activate
Quando você seleciona uma planilha, ela também se torna a ActiveSheet. Entretanto, você pode selecionar várias planilhas de uma vez. Quando várias planilhas são selecionadas ao mesmo tempo, a planilha “superior” é a ActiveSheet. No entanto, você pode alternar a ActiveSheet dentro das planilhas selecionadas.
Selecionar uma Planilha
Sheets("Planilha1").Select
Selecionar Várias Planilhas
Use uma array para selecionar várias planilhas de uma vez:
Worksheets(Array("Planilha2", "Planilha3")).Select
Variável de Planilha
A atribuição de uma planilha a uma variável de objeto permite que você faça referência à planilha pelo nome da variável. Isso pode economizar muita digitação e tornar seu código mais fácil de ler. Há também muitos outros motivos pelos quais você pode querer usar variáveis.
Para declarar uma variável de planilha:
Dim ws as worksheet
Atribuir uma planilha a uma variável:
Set ws = Sheets("Planilha1")
Agora você pode fazer referência à variável da planilha em seu código:
ws.Activate
Percorrer Todas as Planilhas da Pasta de Trabalho
As variáveis de planilha são úteis quando você deseja percorrer todas as planilhas de uma pasta de trabalho. A maneira mais fácil de fazer isso é:
Dim ws as Worksheet
For Each ws in Worksheets
MsgBox ws.name
Next ws
Esse código percorrerá todas as planilhas da pasta de trabalho, exibindo o nome de cada planilha em uma caixa de mensagem. O looping por todas as planilhas em uma pasta de trabalho é muito útil ao bloquear/desbloquear ou ocultar/desativar várias planilhas de uma só vez.
Proteção da Planilha
Proteção da Pasta de Trabalho
A proteção da pasta de trabalho bloqueia a pasta de trabalho contra alterações estruturais, como adição, exclusão, movimentação ou ocultação de planilhas.
Você pode ativar a proteção da pasta de trabalho usando o VBA:
ActiveWorkbook.Protect Password:="Senha"
ou desativar a proteção da pasta de trabalho:
ActiveWorkbook.UnProtect Password:="Senha"
Observação: Você também pode proteger/desproteger sem uma senha, omitindo o argumento Password:
ActiveWorkbook.Protect
Proteção da Planilha
A proteção em nível de planilha impede alterações em planilhas individuais.
Proteger Planilha
Worksheets("Planilha1").Protect "Senha"
Desproteger Planilha
Worksheets("Planilha1").Unprotect "Senha"
Há várias opções para proteger planilhas (permitir alterações de formatação, permitir que o usuário insira linhas, etc.). Recomendamos usar o Macro Recorder para registrar as configurações desejadas.
Discutimos a proteção de planilhas em mais detalhes aqui.
Propriedade Visible da planilha
Talvez você já saiba que as planilhas podem ser ocultadas:
Na verdade, há três configurações de visibilidade da planilha: Visible, Hidden e VeryHidden (Visível, Oculta e Muito Oculta). As planilhas ocultas podem ser reexibidas por qualquer usuário comum do Excel, bastando clicar com o botão direito do mouse na área da guia da planilha (mostrada acima). As planilhas VeryHidden só podem ser reexibidas com código VBA ou no Editor VBA. Use os exemplos de código a seguir para ocultar/remover planilhas:
Reexibir Planilha
Worksheets("Planilha1").Visible = xlSheetVisible
Ocultar Planilha
Worksheets("Planilha1").visible = xlSheetHidden
Worksheets("Planilha1").Visible = xlSheetVeryHidden
Eventos em Nível de Planilha
Os eventos são acionadores que podem causar a execução de “Procedimentos de eventos”. Por exemplo, você pode fazer com que o código seja executado sempre que qualquer célula de uma planilha for alterada ou quando uma planilha for ativada.
Os procedimentos de eventos de planilha devem ser colocados em um módulo de planilha:
Há vários eventos de planilha. Para ver uma lista completa, vá para um módulo de planilha e selecione “Worksheet” (Planilha) no primeiro menu suspenso. Em seguida, selecione um procedimento de evento no segundo menu suspenso para inseri-lo no módulo.
Evento de Ativação de Planilha
Os eventos de ativação da planilha são executados sempre que a planilha é aberta.
Private Sub Worksheet_Activate()
Range("A1").Select
End Sub
Esse código selecionará a célula A1 (redefinindo a área de visualização para o canto superior esquerdo da planilha) sempre que a planilha for aberta.
Evento de Alteração de Planilha
Os eventos de alteração de planilha são executados sempre que um valor de célula é alterado na planilha. Leia nosso tutorial sobre Worksheet Change Events para obter mais informações.
Folha de consulta da planilha
Abaixo você encontrará uma folha de dicas com exemplos de códigos comuns para trabalhar com planilhas no VBA
VBA Worksheets Cheatsheet
VBA worksheets CheatsheetDescription | Code Example |
---|---|
Referencing and Activating Sheets | |
Tab Name | Sheets("Input").Activate |
VBA Code Name | Sheet1.Activate |
Index Position | Sheets(1).Activate |
Select Sheet | |
Select Sheet | Sheets("Input").Select |
Set to Variable | Dim ws as Worksheet Set ws = ActiveSheet |
Name / Rename | ActiveSheet.Name = "NewName" |
Next Sheet | ActiveSheet.Next.Activate |
Loop Through all Sheets | Dim ws as Worksheet For each ws in Worksheets Msgbox ws.name Next ws |
Loop Through Selected Sheets | Dim ws As Worksheet For Each ws In ActiveWindow.SelectedSheets MsgBox ws.Name Next ws |
Get ActiveSheet | MsgBox ActiveSheet.Name |
Add Sheet | Sheets.Add |
Add Sheet and Name | Sheets.Add.Name = "NewSheet" |
Add Sheet With Name From Cell | Sheets.Add.Name = range("a3").value |
Add Sheet After Another | Sheets.Add After:=Sheets("Input") |
Add Sheet After and Name | Sheets.Add(After:=Sheets("Input")).Name = "NewSheet" |
Add Sheet Before and Name | Sheets.Add(Before:=Sheets("Input")).Name = "NewSheet" |
Add Sheet to End of Workbook | Sheets.Add After:=Sheets(Sheets.Count) |
Add Sheet to Beginning of Workbook | Sheets.Add(Before:=Sheets(1)).Name = "FirstSheet" |
Add Sheet to Variable | Dim ws As Worksheet Set ws = Sheets.Add |
Copy Worksheets | |
Move Sheet to End of Workbook | Sheets("Sheet1").Move After:=Sheets(Sheets.Count) |
To New Workbook | Sheets("Sheet1").Copy |
Selected Sheets To New Workbook | ActiveWindow.SelectedSheets.Copy |
Before Another Sheet | Sheets("Sheet1").Copy Before:=Sheets("Sheet2") |
Before First Sheet | Sheets("Sheet1").Copy Before:=Sheets(1) |
After Last Sheet | Sheets("Sheet1").Copy After:=Sheets(Sheets.Count) |
Copy and Name | Sheets("Sheet1").Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = "LastSheet" |
Copy and Name From Cell Value | Sheets("Sheet1").Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = Range("A1").Value |
To Another Workbook | Sheets("Sheet1").Copy Before:=Workbooks("Example.xlsm").Sheets(1) |
Hide / Unhide Sheets | |
Hide Sheet | Sheets("Sheet1").visible = False or Sheets("Sheet1").visible = xlSheetHidden |
Unhide Sheet | Sheets("Sheet1").Visible = True or Sheets("Sheet1").Visible = xlSheetVisible |
Very Hide Sheet | Sheets(Sheet1).Visible = xlSheetVeryHidden |
Delete or Clear Sheets | |
Delete Sheet | Sheets("Sheet1").Delete |
Delete Sheet (Error Handling) | On Error Resume Next Sheets("Sheet1").Delete On Error GoTo 0 |
Delete Sheet (No Prompt) | Application.DisplayAlerts = False Sheets("Sheet1").Delete Application.DisplayAlerts = True |
Clear Sheet | Sheets("Sheet1").Cells.Clear |
Clear Sheet Contents Only | Sheets("Sheet1").Cells.ClearContents |
Clear Sheet UsedRange | Sheets("Sheet1").UsedRange.Clear |
Protect or Unprotect Sheets | |
Unprotect (No Password) | Sheets("Sheet1").Unprotect |
Unprotect (Password) | Sheets("Sheet1").Unprotect "Password" |
Protect (No Password) | Sheets("Sheet1").Protect |
Protect (Password) | Sheets("Sheet1").Protect "Password" |
Protect but Allow VBA Access | Sheets("Sheet1").Protect UserInterfaceOnly:=True |
Unprotect All Sheets | Dim ws As Worksheet For Each ws In Worksheets ws.Unprotect "password" Next ws |