我有一个带有多个按钮的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
答案 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
如果您不喜欢这种方法,请指定运行代码时到底发生了什么。