VBA – Proteção de Pasta de Trabalho (Proteção/Desproteção por Senha)
In this Article
O Excel permite que você proteja suas pastas de trabalho do Excel contra alterações. Este tutorial mostrará como proteger ou desproteger a estrutura da pasta de trabalho usando o VBA.
Proteção de Pasta de Trabalho em VBA
A proteção de pasta de trabalho em VBA permite bloquear a estrutura da pasta de trabalho. Quando uma pasta de trabalho estiver protegida, os usuários não poderão adicionar, excluir, ocultar/reexibir ou proteger/desproteger planilhas. Se você estiver criando um modelo, provavelmente desejará ativar a proteção da pasta de trabalho para evitar que os usuários (ou você!) excluam acidentalmente as planilhas.
Desproteger Pasta de Trabalho em VBA
Para desproteger uma pasta de trabalho, basta usar a seguinte linha de código:
Workbooks("Pasta1").Unprotect
Observação: esse código só funcionará se a pasta de trabalho tiver sido protegida sem uma senha. Se ela estiver protegida com uma senha, você também deverá digitar a senha para desprotegê-la:
Desproteger Pasta de Trabalho com Senha
Essa linha de código desprotegerá uma pasta de trabalho que tenha sido protegida com uma senha:
Workbooks("Pasta1").Unprotect Password:="senha"
ou você pode omitir Password:=
Workbooks("Pasta1").Unprotect "senha"
Desproteger ThisWorkbook
Esse código desprotegerá ThisWorkbook (ThisWorkbook é a pasta de trabalho em que o código em execução está armazenado. Ele nunca será alterado).
ThisWorkbook.Unprotect
ou desprotegerá o ThisWorkbook com uma senha:
ThisWorkbook.Unprotect "senha"
Desproteger ActiveWorkbook (Pasta Ativa)
Esse código desprotegerá o ActiveWorbook.
ActiveWorkbook.Unprotect
ou desproteger o ActiveWorkbook com uma senha:
ActiveWorkbook.Unprotect "senha"
Desproteger Todas as Pastas de Trabalho Abertas
Esse código desprotegerá todas as pastas de trabalho abertas:
Sub DesprotegerTodasPastaAbertas()
Dim wb As Workbook
For Each wb In Workbooks
wb.Unprotect
Next wb
End Sub
Desproteger Pasta de Trabalho – Sem Saber a Senha
Se você precisar desproteger uma pasta de trabalho sem saber a senha, há vários suplementos que podem ajudar. Eu recomendaria o Ribbon Commander.
Desproteger Todas as Planilhas da Pasta de Trabalho
Após desproteger uma pasta de trabalho, talvez você também queira desproteger todas as planilhas da pasta de trabalho. Aqui está um procedimento que desprotegerá todas as planilhas:
Sub DesprotegerPastaETodasPlanilhas()
Dim ws As Worksheet
ActiveWorkbook.Unprotect
For Each ws In Worksheets
ws.Unprotect
Next
End Sub
Proteger a Pasta de Trabalho
Você pode proteger as estruturas da pasta de trabalho da mesma forma que desprotege.
Proteger Pasta de Trabalho sem Senha
Esta linha de código protegerá uma pasta de trabalho (sem senha)
Workbooks("Pasta1").Protect
Observação: muitas vezes aplico a proteção da pasta de trabalho sem senhas, simplesmente para evitar alterações acidentais nas pastas de trabalho.
Proteger a Pasta de Trabalho com Senha
Este código protegerá a estrutura da pasta de trabalho (com uma senha)
Workbooks("Pasta1").Protect "senha"
ou:
Workbooks("Pasta1").Protect Password:="senha"
Proteger o Arquivo do Excel com Senha
Em vez de proteger a pasta de trabalho, talvez você queira proteger com senha um arquivo inteiro do Excel. Para fazer isso usando o VBA, salve como a pasta de trabalho com uma senha:
Workbooks("Pasta1").SaveAs "senha"
Exemplos de Proteção/Desproteção de Pasta de Trabalho
Reexibir Todas as Planilhas da Pasta de Trabalho Protegida
Este procedimento desprotegerá uma pasta de trabalho, reexibirá todas as planilhas e protegerá novamente a pasta de trabalho
Sub DesprotegerPasta_ReexibirTodaPlanilhas()
Dim ws As Worksheet
ActiveWorkbook.Unprotect
For Each ws In Worksheets
ws.Visible = xlSheetVisible
Next
ActiveWorkbook.Protect
End Sub
Proteger a Pasta de Trabalho e Todas as Planilhas
Esse procedimento protegerá todas as planilhas em uma pasta de trabalho e, em seguida, protegerá a pasta de trabalho:
Sub ProtegerPastar_ProtegerTodasPlanilhas()
Dim ws As Worksheet
ActiveWorkbook.Unprotect
For Each ws In Worksheets
ws.Protect
Next
ActiveWorkbook.Protect
End Sub
Você também pode adicionar proteção por senha:
Sub ProtegerPastar_ProtegerTodasPlanilhas_Senha()
Dim ws As Worksheet
ActiveWorkbook.Unprotect "senha"
For Each ws In Worksheets
ws.Protect "senha"
Next
ActiveWorkbook.Protect "senha"
End Sub