VBA – Proteger / Desproteger Planilhas

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on June 14, 2023

Este tutorial lhe ensinará tudo sobre a proteção de planilhas do Excel em VBA – Como proteger ou desproteger planilhas no Excel.

Desproteger Planilha do Excel sem Senha

Para desproteger uma planilha que não esteja protegida por senha, use esta simples linha de código:

Worksheets("Planilha1").Unprotect

Desproteger Planilha do Excel com Senha

Para desproteger uma planilha protegida por senha, você também deve digitar a senha:

Worksheets("Planilha1").Unprotect "Senha"

Desproteger Planilha – Senha Perdida

Para desproteger uma planilha sem saber a senha, você deve usar um suplemento de recuperação de senha.

Proteger planilhas

O menu Proteger Planilha permite bloquear a edição de determinados aspectos da planilha.

menu proteger planilha

Esse menu pode ser encontrado em Revisão > Proteger > Proteger Planilha ou clicando com o botão direito do mouse no nome da guia Planilha1:

proteger pela guia

Geralmente, isso é usado para proteger as células “Bloqueadas” contra edição, permitindo que o usuário final edite apenas determinadas células.

Você pode bloquear células selecionando-as e abrindo a guia Proteção do menu Formatar Células (CTRL + 1).

menu bloquear celulas

Também é possível impedir que o usuário altere a estrutura da planilha (inserindo, excluindo ou redimensionando linhas e colunas), ou que interaja com filtros automáticos, e muito mais.

Proteção da Planilha – Sem Senha

Talvez você queira proteger uma planilha sem digitar uma senha. Isso evitará alterações acidentais na planilha e, ao mesmo tempo, dará ao usuário acesso para fazer alterações, se desejar.

Worksheets("Planilha1").Protect

Proteger Planilha – Proteger com Senha

Worksheets("Planilha1").Protect "Senha"

Configurações de Proteção da Planilha

Os exemplos acima protegerão as planilhas com as configurações de proteção padrão. Em vez disso, talvez você queira personalizar o que está protegido:

Worksheets("Planilha1").Protect Password:=strPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
UserInterfaceOnly:=True, AllowFormattingCells:=False, AllowFormattingColumns:=False, _
AllowFormattingRows:=False, AllowInsertingColumns:=False, AllowInsertingRows:=False, _
AllowInsertingHyperlinks:=False, AllowDeletingColumns:=False, AllowDeletingRows:=False, _
AllowSorting:=False, AllowFiltering:=False, AllowUsingPivotTables:=False

Em vez de usar a sintaxe acima, recomendo gravar uma macro com as configurações desejadas (escolhidas no menu Proteger Planilha acima) e copiar e colar o código gravado em seu procedimento.

Proteger Planilha – Permitir que o VBA Faça Alterações

Por padrão, quando você protege uma planilha, a proteção se aplica às operações do VBA, além das ações do usuário. Se o VBA tentar modificar uma célula bloqueada, você verá um erro de tempo de execução 1004. Para evitar isso, você pode desproteger e proteger novamente suas planilhas sempre que o VBA precisar interagir com elas:

Sub Editar_Planilha1()
    'Desproteger Planilha1
    Worksheets("Planilha1").Unprotect

    'Fazer algo na Planilha1

    'Reproteger Planilha1
    Worksheets("Planilha1").Protect
End Sub

No entanto, é fácil esquecer de desproteger e/ou proteger novamente as planilhas. Isso pode aumentar a probabilidade de um erro de codificação.

Em vez disso, você pode usar a configuração UserInterFaceOnly. Quando VERDADEIRO, as planilhas serão protegidas SOMENTE dos usuários, NÃO do VBA. Seu código VBA estará livre para editar a planilha, como se ela estivesse desbloqueada.

Dois pontos importantes sobre UserInterFaceOnly:

  • Essa configuração não está disponível no menu Proteger Planilha (mostrado acima). É uma configuração que deve ser definida no VBA.
  • A configuração não é salva quando você fecha uma pasta de trabalho. Ela deve ser definida novamente sempre que uma pasta de trabalho for aberta.

Portanto, para definir a propriedade UserInterFaceOnly, você deve colocar o seguinte procedimento de evento Workbook_Open no módulo ThisWorkbook:

Private Sub Workbook_Open()
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        ws.Protect UserInterfaceOnly:=True
    Next ws
End Sub

Workbook_Open é um procedimento de evento especial que será executado toda vez que a pasta de trabalho for aberta. Ele deve ser colocado no módulo ThisWorkbook. Como alternativa, você pode usar o procedimento de evento Auto_Open (não abordado aqui).

Desproteger Todas as Planilhas

Essa macro desprotegerá todas as planilhas em uma pasta de trabalho:

' Desproteger todas as planilhas
Sub DesprotegerTodasPlanilhas()
    Dim ws As Worksheet

    For Each ws In Worksheets
        ws.Unprotect "senha"
    Next ws

End Sub

Macro de Proteção de Todas as Planilhas

Esta macro protegerá todas as planilhas em uma pasta de trabalho:

' Proteger todas as planilhas
Sub ProtegerTodasPlanilhas()
    Dim ws As Worksheet

    For Each ws In Worksheets
        ws.Protect "senha"
    Next ws

End Sub
vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA