Fernando,
O código abaixo bloqueia todas as planilhas através de um loop, sem ao menos solicitar uma senha, ou seja, caso o usuário clicar em Revisão > Desproteger Planilha, ele obterá êxito. Mas ai que esta o secreto, pois, se compartilharmos a planilha, o Excel não o permitirá a clicar em Desproteger Planilha.
É o seguinte, eu quero fazer, se possível, um tratamento de erro global, o qual, em qualquer erro, ele execute o código abaixo. É possível?
'Função que protege todas as planilhas de um arquivo
Sub lsProtegerTodasAsPlanilhas()
'Declara as variáveis necessárias
Dim lPass As String
Dim lQtdePlan As Integer
Dim lPlanAtual As Integer
'Solicita a senha
'O método InputBox é utilizado para solicitar um valor através de um formulário
'Inicia as variáveis
'O método Worksheets.Count passa a quantidade de planilhas existentes no arquivo
lQtdePlan = Worksheets.Count
lPlanAtual = 1
'Loop pelas planilhas
'A função While realiza um loop de código enquanto não passar por todas as planilhas contadas
While lPlanAtual <= lQtdePlan
'O método Worksheets(lPlanAtual).Activate ativa a planilha conforme o índice atual 1, 2, 3...
Worksheets(lPlanAtual).Activate
'O método .Protect proteje a planilha passando os parâmetros para proteger
'objetos de desenho, conteúdo, cenários e passando o password digitado
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=lPass
'Muda o índice para passar para a próxima planilha
lPlanAtual = lPlanAtual + 1
Wend
End Sub
'Função que desprotege todas as planilhas de um arquivo
Sub lsDesprotegerTodasAsPlanilhas()
'Declara as variáveis necessárias
Dim lPass As String
Dim lQtdePlan As Integer
Dim lPlanAtual As Integer
'Solicita a senha
'O método InputBox é utilizado para solicitar um valor através de um formulário
lPass = InputBox("Desproteger todas as planilhas:", "Senha", ActName)
'Inicia as variáveis
'O método Worksheets.Count passa a quantidade de planilhas existentes no arquivo
lQtdePlan = Worksheets.Count
lPlanAtual = 1
'Loop pelas planilhas
'A função While realiza um loop de código enquanto não passar por todas as planilhas contadas
While lPlanAtual <= lQtdePlan
'O método Worksheets(lPlanAtual).Activate ativa a planilha conforme o índice atual 1, 2, 3...
Worksheets(lPlanAtual).Activate
'O método .UnProtect desprotege a planilha
ActiveSheet.Unprotect Password:=lPass
'Muda o índice para passar para a próxima planilha
lPlanAtual = lPlanAtual + 1
Wend
End Sub
Postado : 13/08/2014 5:53 am