Кнопка снятия защиты с VBA - PullRequest
1 голос
/ 19 марта 2019

У меня есть лист Excel с несколькими кнопками. Для запуска макросов лист необходимо разблокировать. Хотя я обнаружил короткие коды VBA, которые защищают / снимают защиту листа при запуске независимо, когда они интегрированы в код кнопки, снятие защиты листа не работает. Код для определенной кнопки:

Sub OptionButton56_Click()
     ActiveSheet.Unprotect Password:="Password"
            If Range("D33").Value = 2 Then
               Sheets("Input").Rows("34:35").Hidden = msoTrue
            ElseIf Range("D33").Value = 1 Then
               Sheets("Input").Rows("34:35").Hidden = msoFalse
            End If
    ActiveSheet.Protect Password:="Password"
End Sub

1 Ответ

0 голосов
/ 19 марта 2019

Этот код должен работать.Когда вы говорите, что это не работает, вы получаете какую-то ошибку или все выполняется, но вы просто не видите ожидаемого изменения?Кроме того, гораздо более простой способ сделать это - использовать userinterfaceonly:=True, когда вы защищаете лист.Если вы используете это, то листы блокируются только для пользователей, а не для кода VBA.Таким образом, вам не нужно разблокировать листы каждый раз, когда вам нужен код для выполнения.Я всегда использую этот макрос для всех своих моделей:

'UserInterfaceOnly locks edits from user but allows VBA to edit (no need to unlock/lock before/after macros)
'This setting is kept in memory, so it must be applied on Open Workbook Event
Sub Lock_Model(wb As Workbook, Optional strFunction As String = "Lock")
    Dim varSheets As Variant

    varSheets = Array("sheet1", "sheet2") ' list all the sheets you want to lock

    'Lock/Unlock specified sheets in model
    If strFunction = "Lock" Then
        For i = LBound(varSheets) To UBound(varSheets)
            wb.Sheets(varSheets(i)).Protect Password:="Password", AllowFormattingColumns:=True, AllowFormattingRows:=True, UserInterfaceOnly:=True
        Next i
    Else
        For i = LBound(varSheets) To UBound(varSheets)
            wb.Sheets(varSheets(i)).Unprotect Password:="Password"
        Next i
    End If
End Sub

Если вам не нравится этот подход, укажите, что именно происходит при запуске кода.

...