C# MS Office Automation:运行宏时收到通知(事件)

C# MS Office Automation:运行宏时收到通知(事件),c#,excel,vba,ms-word,vsto,C#,Excel,Vba,Ms Word,Vsto,我正在使用C#/.NET开发一个MS Office(Excel、Word、PowerPoint和Outlook)外接程序,它跟踪并记录一些事件,如DocumentOpen、DocumentContentChange等。但是,经过几天的搜索,我无法找到在Excel工作簿Word Document上运行宏时获得通知的方法(事件)。。等 困难的方法是使用鼠标和键盘挂钩Win API,尝试捕捉用户运行宏时可能遵循的所有路径,这些路径包括: 使用“宏”对话框(使用纯Win API访问窗口):OnClick

我正在使用C#/.NET开发一个MS Office(Excel、Word、PowerPoint和Outlook)外接程序,它跟踪并记录一些事件,如DocumentOpen、DocumentContentChange等。但是,经过几天的搜索,我无法找到在Excel工作簿Word Document上运行宏时获得通知的方法(事件)。。等

困难的方法是使用鼠标和键盘挂钩Win API,尝试捕捉用户运行宏时可能遵循的所有路径,这些路径包括:

  • 使用“宏”对话框(使用纯Win API访问窗口):OnClick,如果这是ActiveWindow,“Run”按钮具有 聚焦,读取“宏名称:”标签下文本框中的值,但 我发现这种方法非常复杂,因为有一些案例 例如:用户按ENTER键,焦点不在“运行”按钮上 或者,如果用户双击运行宏的宏列表中的某个项
  • 按组合键:ex宏有一个与之关联的Ctrl+F8键

  • 单击形状(主要是excel):检查此形状是否附加了宏

  • 我可以看出,这些方法非常有限


    您有更好的建议吗?

    我这样做的方式是在运行宏时将数据存储在数据库的表中。这样,代码就在宏中,您可以确保如果宏运行,数据将在数据库中。

    您考虑过事件过程吗?它们会自动运行,也可能会通过代码触发其他宏,因此我认为不可能真正检测到哪个宏在何时运行……您是否可以分享您需要访问调用堆栈的原因?如果你以某种方式获得了这些信息,你将如何处理这些信息?别担心vba4all,这不是什么黑客行为!正如我所说,这是一个面向客户的Office COM插件,几周后,我们决定跳过此功能,专注于其他功能。。谢谢你的评论。我不确定你是否真的理解我的问题!阅读你的答案,你假设我是宏的创造者,事实并非如此。宏可以位于任何文档中,我甚至不需要编辑这些宏,只在其中一个宏运行时收到通知。。那我需要它的名字。