Para proteger ou desproteger todas as abas de uma vez com VBA, use um loop For Each na coleção Worksheets chamando ws.Protect Password:="senha" (ou ws.Unprotect) dentro do loop — assim, em vez de repetir Revisão > Proteger Planilha aba por aba, uma única macro aplica a proteção em todas as planilhas da pasta de trabalho de uma só vez.
Você já precisou proteger todas as abas de uma pasta de trabalho com dezenas de planilhas — uma por filial, uma por mês, uma por projeto — e teve que repetir manualmente o mesmo processo de proteção, aba por aba, digitando a mesma senha várias vezes?
Esse trabalho repetitivo não só consome tempo como aumenta o risco de esquecer uma aba sem proteção, ou de digitar a senha errada em uma delas, deixando parte do arquivo vulnerável a alterações acidentais justamente na planilha que você esqueceu de proteger.
Neste artigo iremos mostrar como usar o VBA para proteger e desproteger todas as abas de uma pasta de trabalho automaticamente, com uma única macro, incluindo como pular abas específicas que devem continuar liberadas para edição.
Protegendo todas as abas com um loop For Each
O método Protect de um objeto Worksheet aplica a mesma proteção que você configuraria manualmente em Revisão > Proteger Planilha. Para aplicar isso em todas as abas de uma vez, basta colocar a chamada dentro de um loop For Each percorrendo ThisWorkbook.Worksheets:
Sub ProtegerTodasAsAbas()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Protect Password:="minhasenha123"
Next ws
MsgBox "Todas as abas foram protegidas!"
End Sub
Para desproteger todas de uma vez, o processo é o espelho do anterior, usando Unprotect com a mesma senha:
Sub DesprotegerTodasAsAbas()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect Password:="minhasenha123"
Next ws
MsgBox "Todas as abas foram desprotegidas!"
End Sub
Se qualquer uma das abas já estiver protegida com uma senha diferente da informada no código, o VBA gera um erro de execução (Erro 1004) ao tentar desprotegê-la — por isso é importante manter a senha usada no código sempre igual à senha realmente aplicada nas planilhas.
Controlando o que fica permitido mesmo com a proteção ativa
O método Protect aceita parâmetros opcionais para liberar ações específicas mesmo com a planilha protegida, como classificar dados ou usar filtros. Um uso comum é permitir que o usuário ainda formate células ou use o AutoFiltro:
ws.Protect Password:="minhasenha123", DrawingObjects:=True, _
Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowSorting:=True
Cada um desses parâmetros corresponde a uma das caixas de seleção que aparecem na janela manual de Proteger Planilha (a mesma que se abre em Revisão > Proteger Planilha), só que definidos por código e aplicados de uma vez em todas as abas dentro do loop.
Exemplo prático: protegendo todas as abas exceto o painel
Imagine uma pasta de trabalho de controle financeiro com doze abas mensais (Janeiro a Dezembro) mais uma aba Painel, que reúne gráficos e deve continuar liberada para que o usuário possa mover os elementos visuais livremente. O objetivo é proteger todas as abas mensais de uma vez, mas pular a aba Painel:
| Aba | Deve ser protegida? |
|---|---|
| Janeiro | Sim |
| Fevereiro | Sim |
| … | Sim |
| Painel | Não |
A macro abaixo resolve isso com um If dentro do loop, comparando o nome da aba atual:
Sub ProtegerAbasMensais()
Dim ws As Worksheet
Dim senha As String
senha = "financeiro2026"
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Painel" Then
ws.Protect Password:=senha
End If
Next ws
MsgBox "Abas mensais protegidas. O Painel continua liberado."
End Sub
Sub DesprotegerAbasMensais()
Dim ws As Worksheet
Dim senha As String
senha = "financeiro2026"
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Painel" Then
ws.Unprotect Password:=senha
End If
Next ws
MsgBox "Abas mensais desprotegidas."
End Sub
Note que a senha fica escrita diretamente no código nesse exemplo simples, o que é aceitável para proteção contra alterações acidentais entre colegas de confiança, mas não deve ser tratado como uma segurança forte — qualquer pessoa com acesso ao código VBA (mesmo protegido) consegue, com algum esforço, recuperar essa senha.
Protegendo também a estrutura da pasta de trabalho
Proteger cada planilha individualmente impede alterações nas células, mas não impede que alguém insira, exclua, renomeie, mova ou reexiba abas ocultas. Para travar também a estrutura da pasta de trabalho, use o método Protect do próprio objeto ThisWorkbook, combinando com o loop de proteção das abas:
Sub ProtegerTudo()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Protect Password:="financeiro2026"
Next ws
ThisWorkbook.Protect Password:="financeiro2026", Structure:=True
End Sub
Com Structure:=True ativo, ninguém consegue adicionar, excluir, mover, ocultar ou renomear planilhas enquanto a proteção da estrutura estiver ativa, mesmo que a pessoa tenha acesso de edição ao arquivo.
Disponibilidade
Os métodos Protect e Unprotect de Worksheet e Workbook via VBA estão disponíveis no Excel para Windows a partir da versão 2007, incluindo 2010, 2013, 2016, 2019, 2021 e Excel 365, e também no Excel para Mac. O Excel Online não executa macros VBA, mas permite proteger planilhas manualmente uma de cada vez pelo menu Revisão. O Google Sheets tem proteção de planilhas equivalente, automatizável via Apps Script com o método protect() de cada aba, com sintaxe diferente do VBA.
Perguntas frequentes
O que acontece se eu tentar desproteger uma aba com a senha errada no código?
O VBA gera um erro de execução (Erro 1004: “Erro de Método Unprotect ou de Objeto _Worksheet”) e a macro para nesse ponto. Verifique se a senha usada no código é exatamente igual à senha aplicada nas planilhas, incluindo maiúsculas e minúsculas, já que senhas do Excel diferenciam letras maiúsculas de minúsculas.
Dá para proteger todas as abas sem definir senha nenhuma?
Sim. Basta chamar ws.Protect sem o parâmetro Password dentro do loop. Nesse caso, a proteção impede edições acidentais, mas qualquer pessoa consegue desprotegê-la manualmente pelo menu Revisão > Desproteger Planilha, sem precisar digitar senha nenhuma.
Proteger todas as planilhas com VBA impede que fórmulas sejam recalculadas?
Não. A proteção de planilha (Protect) bloqueia apenas a edição de células marcadas como bloqueadas e outras ações de interface, mas não afeta o recálculo normal de fórmulas, que continua funcionando normalmente mesmo com a planilha protegida.
Veja também: Como Proteger uma Planilha no Excel: Guia Completo (aquele artigo explica o processo manual pelo menu Revisão, aba por aba; este aqui mostra como automatizar a proteção e desproteção de todas as abas de uma vez com uma macro VBA).
Compartilhe ou Comente
Se você curtiu esse artigo aonde mostramos como usar um loop For Each com os métodos Protect e Unprotect para proteger ou desproteger todas as abas de uma pasta de trabalho de uma só vez, incluindo como pular abas específicas, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.
Sua pasta de trabalho tem muitas abas que você protege manualmente uma por uma? Quantas planilhas você costuma proteger de cada vez? Conta para nós nos comentários!