Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
Excel VBA:从personal.xlsb双击之前_Excel_Vba - Fatal编程技术网

Excel VBA:从personal.xlsb双击之前

Excel VBA:从personal.xlsb双击之前,excel,vba,Excel,Vba,我希望执行以下操作:我希望能够在我的personal.xlsb中修改BeforeDoubleClick事件。 这里有一个例子说明了我的想法:我想,当我双击一个单元格时,它的背景色设置为绿色。通常我必须在工作簿工作簿\u BeforeDoubleClick事件中执行此操作,但是我希望能够在任何工作簿和我的personal.xlsb中执行此操作,以便我可以为BeforeRightClick事件指定不同的方法。理想情况下,我会有一个带有几个按钮的userform,每个按钮为BeforeRightCli

我希望执行以下操作:我希望能够在我的personal.xlsb中修改BeforeDoubleClick事件。 这里有一个例子说明了我的想法:我想,当我双击一个单元格时,它的背景色设置为绿色。通常我必须在工作簿工作簿\u BeforeDoubleClick事件中执行此操作,但是我希望能够在任何工作簿和我的personal.xlsb中执行此操作,以便我可以为BeforeRightClick事件指定不同的方法。理想情况下,我会有一个带有几个按钮的userform,每个按钮为BeforeRightClick事件分配不同的方法

这可能吗?我无法在网上找到解决方案


致以最良好的祝愿

这是可能的-要做到这一点,您需要捕获
应用程序
事件

此处提供了带有示例代码的完整说明:

这是可能的-要做到这一点,您需要捕获
应用程序
事件

此处提供了带有示例代码的完整说明:

在您个人文件的
本工作簿
模块中,只需几行代码即可:

Option Explicit

Public WithEvents App As Application

Private Sub Workbook_Open()
    Set App = Application
End Sub

Private Sub App_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Debug.Print "RightClick on Sheet: " & Sh.Name & " at " & Target.Address
End Sub
(请注意,添加代码后,您必须保存、完全关闭Excel并重新启动它,以便触发
Workbook\u Open
事件)

但是,有两件事需要考虑:

  • 当您设置
    Cancel=True
    时,您窃取了所有上下文菜单-我不建议这样做。但是,如果设置
    Cancel=False
    ,将有两个并行操作,第一个是您的操作,只有在该操作完成后(显示表单时可能需要很长时间),关联菜单才会弹出-非常混乱
  • 有几种情况下会重置全局变量,请参见此处的讨论:一旦发生其中一个事件,您的
    app
    变量将被重置,并且从那时起,事件将不再触发,直到您重新启动Excel

  • 我的建议是:为个人工作簿中的宏指定键盘快捷键。触发的事件不是右键单击,而是例如
    Ctrl+Shift+F
    F或在您的工作表上。

    您的个人文件的
    此工作簿
    模块中只需几行代码即可:

    Option Explicit
    
    Public WithEvents App As Application
    
    Private Sub Workbook_Open()
        Set App = Application
    End Sub
    
    Private Sub App_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
        Debug.Print "RightClick on Sheet: " & Sh.Name & " at " & Target.Address
    End Sub
    
    (请注意,添加代码后,您必须保存、完全关闭Excel并重新启动它,以便触发
    Workbook\u Open
    事件)

    但是,有两件事需要考虑:

  • 当您设置
    Cancel=True
    时,您窃取了所有上下文菜单-我不建议这样做。但是,如果设置
    Cancel=False
    ,将有两个并行操作,第一个是您的操作,只有在该操作完成后(显示表单时可能需要很长时间),关联菜单才会弹出-非常混乱
  • 有几种情况下会重置全局变量,请参见此处的讨论:一旦发生其中一个事件,您的
    app
    变量将被重置,并且从那时起,事件将不再触发,直到您重新启动Excel
  • 我的建议是:为个人工作簿中的宏指定键盘快捷键。例如,触发的事件不是右键单击,而是
    Ctrl+Shift+F
    toF或在工作表上