Excel VBA:工作表受保护的工作表时不会运行双击事件

时间:2017-04-19 14:02:14

标签: excel excel-vba vba

我在运行工作表事件(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无法运行的原因?有没有办法让它在事件运行之前没有取消保护表单?

2 个答案:

答案 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选项)。