我是 VSTO 上的事件处理新手。我在网上进行了广泛的研究,包括挖掘 Microsoft 文档并尝试从支持中心应用一个实用但旧的示例。
此示例的问题在于它不适Excel.Application用于调用ThisAddin. 所以我尝试了自己的一个:
- 我有一个 Excel 2010 应用程序范围的 VSTO,通过 VS 2017 创建。
- 我添加了一个新文件
MyEvents.vb,其中包含以下内容:
.
Imports Microsoft.Office.Interop.Excel
Module MyEvents
WithEvents ThisApp As Excel.Application '= Globals.ThisAddIn.Application
Private Sub ThisApp_SheetBeforeDoubleClick(Sh As Object, Target As Range, ByRef Cancel As Boolean) Handles ThisApp.SheetBeforeDoubleClick
Dim FromSheet As Excel.Worksheet = Sh
System.Diagnostics.Debug.Print("Event triggered: ThisApp_SheetBeforeDoubleClick in {0} or {1}", FromSheet, Target.Worksheet.Name)
End Sub
Private Sub ThisApp_WorkbookActivate(Wb As Workbook) Handles ThisApp.WorkbookActivate
System.Diagnostics.Debug.Print("Event triggered: ThisApp_WorkbookActivate")
End Sub
End Module
当我编译时,打开一个新工作簿并尝试双击或激活另一个工作簿:没有任何反应。我一定遗漏了一些明显的东西。我觉得我缺乏一些关于通过 VSTO 处理事件的基础知识,我很高兴有人建议对此事进行一些额外的阅读。
例如:
- 我需要
WithEvents ThisApp As Excel.Application = Globals.ThisAddIn.Application还是只是WithEvents ThisApp As Excel.Application?即,我可以将事件绑定到给定对象(应用程序、工作表等),还是需要在Sub触发事件后检查调用者,为什么? - 是否可以从一个类处理 VSTO 事件,还是必须是一个模块?可以在 a
Module中Namespace吗?是否/可以链接到一个Shared WithEvents ThisApp? - 如果它不是 a 会发生什么
Shared Class?Sub它会像我目前有这样的实例一样多次运行我的处理Class吗?
正如人们所看到的,我在这里有点迷失了..我想自己运行所有这些测试,但我无法做一些应该非常基本的事情..!