Como proteger uma pasta de trabalho com vba?
Para proteger uma pasta de trabalho, você deve usar o método PROTECT do VBA. Usando esse método, você pode usar uma senha ou até mesmo ativar a proteção da pasta de trabalho sem senha. Mas há uma coisa que você precisa considerar para a senha que você usa: CASE SENSITIVE.
Workbook.Protect "Password"
- Especifique a pasta de trabalho que você deseja proteger.
- Toque e aponte e selecione o método de proteção na lista ou você pode tocar em “Proteger”.
- Digite a senha que deseja definir.
- Execute o código para proteger a pasta de trabalho.
Neste tutorial, aprenderemos esse método de diferentes maneiras e também como desproteger uma pasta de trabalho.
Links úteis: Executar uma macro – Gravador de macro – Editor Visual Basic – Manual pessoal de macros
Proteja uma pasta de trabalho com uma senha
Abaixo está o código que você precisa usar para proteger uma pasta de trabalho com senha. Neste código, primeiro você tem o nome da pasta de trabalho e o método de proteção por senha.
Workbooks("Book1").Protect "test123"
E quando executo esse código, ele bloqueia a pasta de trabalho “Livro1”.
Proteja uma pasta de trabalho sem senha
E se quiser proteger uma pasta de trabalho sem senha, você deve ignorar o argumento “Senha”, assim como o código a seguir.
Workbooks("Book1").Protect
Se você tentar proteger uma pasta de trabalho sem senha que já esteja protegida por senha, o Excel exibirá uma caixa de diálogo para inserir essa senha.
Desproteger uma pasta de trabalho com uma senha
Da mesma forma, você pode usar o método unprotect para desproteger a pasta de trabalho e o código seria semelhante ao abaixo.
Workbooks("Book1").Unprotect "test123"
Há uma coisa que você precisa cuidar se estiver tentando desproteger uma pasta de trabalho que está
Desproteger uma pasta de trabalho sem senha
E se uma pasta de trabalho estiver protegida sem senha, você poderá usar o mesmo método sem especificar o argumento de senha.
Proteja todas as pastas de trabalho abertas
No código abaixo, temos um loop FOR EACH para percorrer todas as pastas de trabalho abertas e proteger cada pasta de trabalho, uma por uma, usando o mesmo método de proteção.
'variable to use as a workbook Dim wb As Workbook 'loop through all the open workbooks For Each wb In Application.Workbooks 'condition to check workbook name If wb.Name <> "PERSONAL.XLSB" Then 'protect every workbook with a password wb.Protect "test123" End If Next wb End Sub
Como estou usando a pasta de trabalho de macro pessoal, usei uma instrução IF THEN ELSE para ignorar se o nome da pasta de trabalho for ” personal.xlsb “. Certifique-se também de cuidar disso.
Proteja uma pasta de trabalho fechada
Você também pode proteger e desproteger uma pasta de trabalho fechada salva em um local. Veja o código a seguir, onde usei o local da minha área de trabalho para usar o arquivo “test.xlsx”.
Sub vba_protect_workbook() 'declare varibale to use for the workbook Dim wb As Workbook 'open the workbook that you want to protect Set wb = Workbooks.Open("C:UsersDellDesktoptest.xlsx") 'turn off the screen-updating to _ done everything in the backend Application.ScreenUpdating = False 'protect the workbook wb.Protect 'close the workbook after protecting wb.Close SaveChanges = True 'turn off the screen-updating Application.ScreenUpdating = True End Sub
O código acima usou o método Workbook.Open para abrir a pasta de trabalho que você deseja proteger e, em seguida, desabilitou a atualização da tela para funcionar no back-end.
Proteja todas as pastas de trabalho fechadas em uma pasta
O código a seguir percorre todas as pastas de trabalho que estão na pasta especificada como caminho. E então abra cada fichário, proteja-o e feche um por um.
Sub vba_protect_all_the_workbooks() 'declare variables Dim wb As Workbook Dim myPath As String Dim myFile As String Dim myExtension As String Dim FldrPicker As FileDialog 'optimize macro Application.ScreenUpdating = False Application.EnableEvents = False Application.Calculation = xlCalculationManual 'specify the folder where workbooks are saved myPath = "C:UsersDellDesktopfolder" 'jump to reset setting if there's an error On Error GoTo ResetSettings 'target file fxtension (must include wildcard "*") myExtension = "*.xls*" 'target path myFile = Dir(myPath & myExtension) 'Loop through each Excel file in folder Do While myFile <> "" 'Set variable equal to opened workbook Set wb = Workbooks.Open(Filename:=myPath & myFile) 'protect workbook wb.Protect 'Save and Close Workbook wb.Close SaveChanges:=True 'Get next file name myFile = Dir Loop 'Message Box when task is completed MsgBox "Done!" 'reset setting that were change for optimization ResetSettings: Application.EnableEvents = True Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub