Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 双击单元格时,为什么下面的代码不执行?_Vba_Double Click - Fatal编程技术网

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

Vba 双击单元格时,为什么下面的代码不执行?,vba,double-click,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 =

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

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

不要手动键入这些签名中的任何一个

请改用“代码”窗格下拉列表:

从左侧下拉列表中选择
工作表
,然后在右侧下拉列表中选择要处理的事件;VBE将为您生成具有正确签名的方法存根

手动键入它们可能(而且确实!)导致处理程序永远不会被调用,或者更糟的是,被调用,但在错误的参数中给定了参数值,例如,如果
UserForm\u QueryClose
是使用反向参数手动键入的(处理程序有2个
整数
参数,因此您需要记住确切的顺序。。否则,您将分配
取消
,表单将理解您分配了
关闭模式

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

工作簿
模块(即
此工作簿
)中,您可以在双击前处理
工作表
事件,以处理双击工作簿中的任何工作表:

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

End Sub

不要手动键入这些签名中的任何一个

请改用“代码”窗格下拉列表:

从左侧下拉列表中选择
工作表
,并在右侧下拉列表中选择要处理的事件;VBE将为您生成具有正确签名的方法存根

手动键入它们可能(而且确实!)导致处理程序永远不会被调用,或者更糟的是,被调用,但在错误的参数中给定了参数值,例如,如果
UserForm\u QueryClose
是使用反向参数手动键入的(处理程序有2个
整数
参数,因此您需要记住确切的顺序。。否则,您将分配
取消
,表单将理解您分配了
关闭模式

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

工作簿
模块(即
此工作簿
)中,您可以在双击前处理
工作表
事件,以处理双击工作簿中的任何工作表:

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

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-这在
选择
命令中用于返回
vbRed
1
不是对它为什么不起作用的回答(@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
为TRUE或FALSE,因此
Not.Bold
将返回相反的结果。
粗体=真,因此不粗体=假

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-这在
选择
命令中用于返回
vbRed
1

在双击之前使用
工作表。更新后的代码为:在双击之前使用私有子工作表(ByVal目标为Excel.range,Cancel为Boolean),但它仍然没有触发。请提前感谢。事件处理程序绑定到它的实现工作表。请确保在正确的工作表代码中实现该处理程序。顺便说一句,“下面的代码运行得更早”是完全不可能的。该方法的签名与任何
工作表事件
界面都不匹配,因此它不可能被调用。将光标放在
If
语句上,然后按F9键创建断点。然后双击单元格。这样您就可以知道它是否被调用。FWIW它在这里工作得非常好。请在双击之前使用
工作表改为单击
。更新后的代码为:双击之前的私有子工作表(ByVal目标为Excel.range,Cancel为Boolean),但它仍然没有触发。请提前感谢。事件处理程序绑定到其实现的工作表。请确保在正确的工作表代码中实现该处理程序。顺便说一句,“下面的代码运行得更早”是完全不可能的。该方法的签名与任何
工作表事件
界面都不匹配,因此它不可能被调用。将光标放在
If
语句上,按F9键创建断点。然后双击一个单元格。这样您就可以知道它是否被调用。FWIW它在这里工作得非常好。Private Sub_BeforeDoub工作表leClick(ByVal目标为Excel.range,Cancel为布尔值)如果Target.Font.ColorIndex为1,则Target.Cells.Font.ColorIndex=1 Target.Font.Bold=False,否则Target.Cells.Font.Color=vbRed Target.Font.Bold=True End如果Cancel=True End,则将此子项放置在