我在运行工作表事件(BeforeDoubleClick
)时遇到问题,而工作表受到保护。 (实际上,整个工作簿都受到保护。)整个事件将不会运行,因此即使在事件发生更改之前,我也无法将ActiveSheet.Unprotect
作为工作表中的第一行运行。为了完整起见,这是我的代码,虽然它甚至没有运行,所以它可能不是一个因素:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
ActiveSheet.Unprotect
Call ToggleReceiptSetting(Target, "statements")
ActiveSheet.Protect
Cancel = True
End Sub
如果我手动取消保护工作表,则会运行该事件。如果工作表受到保护,有没有人有解决方案或Excel无法运行的原因?有没有办法让它在事件运行之前没有取消保护表单?
答案 0 :(得分:0)
啊哈!愚蠢的我。它没有运行的原因是因为单元格从预定义的列表中获取数据。因此,每当我点击单元格时,它都会自动进入"列表模式"因此不会运行doubleclick事件。我没有机会双击,因为一次点击足以激活"列表模式"!
答案 1 :(得分:0)
我遇到了同样的问题,我需要在不删除列表的情况下解决它。
我找到了解决方法:
在保护工作表时,如果您“允许”最后两个选项(“对象”和“方案”),则在激活工作表保护的情况下单击列表单元时,该列表将不会打开,因此,它将允许DoubleClick事件运行。
当然,您也可以在vba中对其进行编程:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, ActiveSheet.Range("YOUR_RANGE_HERE")) Is Nothing Then
ActiveSheet.Unprotect Password:="YOUR_PASSWORD_HERE"
'YOUR_CODE_HERE
ActiveSheet.Protect UserInterfaceOnly:=True, DrawingObjects:=False, Contents:=True, Scenarios:=False, _
AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowSorting:=True, AllowFiltering:=True, Password:="YOUR_PASSWORD_HERE"
End If
End Sub
请注意,在保护性声明中,我包含/允许您可能希望排除的其他选项。检查所需的这些选项中的哪些(可以在需要时使用宏记录器,但不要忘记单击objets和visions选项)。