为什么双击单元格时下面的代码不会执行?

Why wont the code below execute when a cell is double clicked on?

下面的代码 运行 较早,但在双击单元格时不会执行。

Private Sub Worksheet_DoubleClick(ByVal Target As range, Cancel As Boolean)
    If Target.Font.Bold = False Then

            Target.Font.Bold = True
            Target.Font.Color = vbRed
    Else
            Target.Font.Bold = False
            Target.Font.Color = 1

    End If
End Sub

请勿手动输入任何这些签名!

改用代码窗格下拉菜单:

Select Worksheet 从左边的下拉列表中,然后在右边的下拉列表中选择一个事件来处理; VBE 将为您生成一个带有正确签名的方法存根。

从头顶手动输入它们可能(并且确实如此!)导致处理程序最终永远不会被调用,或者更糟的是,调用,但是在错误的参数中给定参数值,例如如果 UserForm_QueryClose 是用倒置参数手动输入的(处理程序有 2 个 Integer 参数,所以你需要记住确切的顺序..否则你分配 Cancel 并且表单理解你分配CloseMode)

如果您没有在左侧下拉列表中看到 Worksheet,则您不在工作表的代码隐藏模块中。工作表事件只能在工作表模块中处理。

Workbook 模块(即 ThisWorkbook)中,您可以处理 SheetBeforeDoubleClick 事件来处理双击 任何 工作表在工作簿中:

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

End Sub

不是为什么它不起作用的答案(@Mat's Mug 和@Scott Craner 再次击败我 ),而是代码的缩短版本。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    With Target.Font
        .Bold = Not .Bold
        .Color = Choose(Abs(CLng(.Bold)) + 1, 1, vbRed)
    End With

End Sub

好吧,不像原来那么容易理解,但这是它在做什么:

Target.Font.Bold 不是真就是假,所以 Not .Bold 将 return 相反。
粗体 = TRUE 所以非粗体 = FALSE

Abs(CLng(.Bold)) + 1
同样,.Bold 是 TRUE 或 FALSE。数值上 TRUE = -1,FALSE = 0。

CLNG(.Bold) 将 return -1 或 0.
ABS(CLNG(.Bold)) 将 return 1 或 0。
Abs(CLng(.Bold)) + 1 将 return 1 或 2 - 在 CHOOSE 命令中用于 return vbRed1.