У меня есть очень простой макрос, созданный для переключения скрытия и отображения строк. Я очень новичок в VBA, поэтому извиняюсь за основной вопрос. Код для переключения:

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

При защите листа макрос явно не работает, поэтому я пытаюсь использовать приведенный ниже код для блокировки / разблокировки листа в функции, но получаю ошибку 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

Рабочая тетрадь называется QN6, а лист - Финал. Любая помощь в исправлении кода приветствуется.

1 ответ1

0

Если строки Rows("57:73") находятся на листе с именем "Final" , необходимо использовать кавычки для всех строк


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

,

Другой вариант - защитить лист один раз, используя параметр Protect UserInterfaceOnly:=True

Эта подпрограмма в модуле ThisWorkbook :


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

и тогда вам не нужно Unprotect Protect / защиту листа для каждого действия в ваших Subs

Public Sub CommandButton1_Click()

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

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .