VBA – Proteger / Desproteger Planilhas
In this Article
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.
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:
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).
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