为什么双击单元格时下面的代码不会执行?
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 vbRed
或 1
.
下面的代码 运行 较早,但在双击单元格时不会执行。
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 vbRed
或 1
.