Como proteger / desproteger a alternância de macros

0

Eu tenho uma macro muito simples criada para alternar a ocultação e a exibição de linhas. Eu sou muito novo no VBA, então peço desculpas pela pergunta básica. O código para a alternância é:

Private Sub CommandButton1_Click()
    Rows("57:73").Hidden = Not Rows("57:73").Hidden
End Sub

Ao proteger a planilha, a macro obviamente não funciona, então estou tentando usar o código abaixo para bloquear / desbloquear a planilha dentro da função, mas estou recebendo um erro 424.

Private Sub CommandButton1_Click()
    ThisWorkbook.Worksheets(Final).Unprotect (1234)
    Rows("57:73").Hidden = Not Rows("57:73").Hidden
    ThisWorkbook.Worksheets(Final).Protect (1234)
End Sub

A pasta de trabalho é intitulada QN6 e a folha é intitulada Final. Qualquer ajuda para corrigir o código é bem-vinda.

    
por Van Richardson 26.05.2018 / 19:39

1 resposta

0

Se as linhas Rows("57:73") estiverem na planilha chamada "Final" , você precisará usar aspas para todas as strings

Option Explicit

Public Sub CommandButton1_Click()
    With ThisWorkbook.Worksheets("Final")
        .Unprotect "1234"
        .Rows("57:73").Hidden = Not .Rows("57:73").Hidden
        .Protect "1234"
    End With
End Sub

.

Outra opção é proteger a planilha uma vez, usando o parâmetro Protect UserInterfaceOnly:=True

Este sub no ThisWorkbook módulo:

Private Sub Workbook_Open() 'in ThisWorkbook Module

    'Set UserInterfaceOnly to True to protect the user interface, but not macros

    ThisWorkbook.Worksheets("Final").Protect Password:="1234", UserInterfaceOnly:=True

End Sub

e, em seguida, você não precisa Unprotect / Protect da planilha para cada ação em seus Subs

Public Sub CommandButton1_Click()

    With ThisWorkbook.Worksheets("Final")
        .Rows("57:73").Hidden = Not .Rows("57:73").Hidden
    End With

End Sub
    
por 26.05.2018 / 23:12