如何通过VBA / Excel捕获其他工作簿中的右键单击事件

将以下代码添加到Excel中的ThisWorkbook对象后,可以成功捕获当前工作簿中的任何工作表上的右键单击。

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) MsgBox "OK" End Sub 

但是,如果可以从其他工作簿中捕获右键单击事件,可否请您提出build议?

案件

有一个xlam文件来存储VBA项目的所有脚本。 在xlam文件的Thisworksheet对象中,我添加了以下事件

 '1) add popmenu when open any new workbook ' It works fine Private Sub Workbook_Open() Call addPopMenu End Sub '2) delete popmenu when close a workbook ' It works fine Private Sub WorkBook_Close() Call deletePopMenu End Sub '3) Capture the right-click event before displaying popmenu 'It does not work Private Sub Worksheet_BeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 'Call CheckPopMenu(Target) 'Aims to set the pop-menu based on the value in the cell MsgBox "OK" End Sub 

问题

通过代码(1) ,popup式菜单已成功添加到新的Excel工作簿中。 不幸的是,右键单击任何新的Excel工作簿时,不能调用代码(3) 。 因此,我无法根据单元格中的值更新popup式菜单。

有没有办法使它工作? 谢谢。

更新

Mat's Mug的build议效果很好。 任何信贷都应该去马特杯。

以下是我的工作代码基于马克杯的build议。 希望对困扰这个问题的人们有所帮助

1)将以下“xAppClass”类模块添加到VBA项目

 Option Explicit Public WithEvents ExcelAppEvents As Application Private Sub Class_Initialize() Set ExcelAppEvents = Application End Sub Private Sub ExcelAppEvents_sheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Call CheckCellMenu(Target) 'replace with your own function End Sub 

2)将以下代码添加到模块

 Public exlApp As New xAppClass 

3)在“ThisWorkbook”对象中,添加

 Private Sub Workbook_Open() Set exlApp = New xAppClass End Sub 

添加上面的代码并运行“Workbook_open”例程后,右键单击现在可以更新所有工作簿的工作表上的popup式菜单。