VBA解锁按钮

时间:2019-03-19 15:56:06

标签: excel vba radio-button password-protection

我有一个带有多个按钮的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 :(得分:0)

该代码应该起作用。当您说它不起作用时,您是遇到某种错误还是正在执行所有操作,但您没有看到预期的更改?另外,一种更简单的方法是在保护工作表时使用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

如果您不喜欢这种方法,请指定运行代码时到底发生了什么。