Como Proteger e Desproteger Todas as Abas de uma Vez com VBA

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.

DOMINE EXCEL COMIGO

QUERO APRENDER EXCEL

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!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *