当双击单元格时,为什么不执行以下代码?

时间:2017-06-01 15:20:40

标签: vba double-click

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

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

2 个答案:

答案 0 :(得分:2)

不要手动输入任何这些签名!

请改为使用代码窗格下拉列表:

code pane dropdowns

从左下拉列表中选择Worksheet,然后在右下拉列表中选择要处理的事件; VBE将为您生成一个具有适当签名的方法存根。

从头顶手动输入它们可以(并且确实!)导致最终从未被调用的处理程序,或者更糟糕的是,调用,但是给出了参数值错误的论点,例如如果使用反转参数手动输入UserForm_QueryClose(处理程序有2个Integer参数,那么您需要记住确切的顺序..否则您指定Cancel并且表单理解您已分配CloseMode

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

Workbook模块(即ThisWorkbook)中,您可以处理SheetBeforeDoubleClick事件,以便双击工作簿中的任何工作表:< / p>

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

End Sub

答案 1 :(得分:2)

不能解释为什么它不起作用(@Mat&#39; Mug和@Scott Craner再次击败我,但缩短了代码版本。< / p>

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为TRUE或FALSE,因此Not .Bold将返回相反的结果 Bold = TRUE所以不是粗体= FALSE

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

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