【问题标题】:VBA: BeforeDoubleClick from personal.xlsbVBA:来自personal.xlsb的BeforeDoubleClick
【发布时间】:2018-05-29 18:11:07
【问题描述】:

我想要执行以下操作:我希望能够在我的 personal.xlsb 中修改 BeforeDoubleClick 事件。 这是我想到的一个例子:我想要,当我双击一个单元格时,它的背景色设置为绿色。通常我必须在 Workbooks Workbook_BeforeDoubleClick 事件中执行此操作,但是我希望能够在任何工作簿中以及从我的 personal.xlsb 中执行此操作,以便我可以为 BeforeRightClick 事件分配不同的方法。理想情况下,我会有一个带有几个按钮的用户表单,每个按钮都为 BeforeRightClick 事件分配不同的方法。

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

最好的问候!

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    可以在您的个人文件的ThisWorkbook 模块中添加几行代码:

    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_Open事件)。

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

    1. 当您设置Cancel = True 时,您会窃取所有上下文菜单 - 我不建议您这样做。但是,如果你设置Cancel = False,就会有两个动作并行,第一个是你的动作,只有在那个动作完成之后(显示一个表单的时候可能会很长时间),上下文菜单才会弹出——非常令人困惑。
    2. 有几种情况会重置全局变量,请参阅此处的讨论:What is the lifetime of a global variable in excel vba? 一旦发生这些事件之一,您的 app 变量将被重置,并且从那时起事件将不再触发,直到您重新启动 Excel。

    我的建议:在您的个人工作簿中为宏分配键盘快捷键。例如,要触发的事件不是右键单击,而是Ctrl+Shift+FF格式化您的工作表。

    【讨论】:

      【解决方案2】:

      有可能 - 为此,您需要捕获 Application 事件。

      此处提供了带有示例代码的完整说明: http://www.cpearson.com/excel/AppEvent.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-07
        • 2016-11-08
        • 1970-01-01
        • 2015-11-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多