【发布时间】:2013-04-10 15:43:52
【问题描述】:
我正在做一些关于 excel addIn abc.xlam 的工作。 此插件在 excel 插件中启用。 每当我在 excel 中打开工作表(新的或现有的)时,我都想启动一个 .exe 文件。 我想在打开工作簿时在 .xlam 插件中对这个 .exe 启动部分进行编码。 请告诉我我该怎么做?
【问题讨论】:
标签: vba excel excel-2010
我正在做一些关于 excel addIn abc.xlam 的工作。 此插件在 excel 插件中启用。 每当我在 excel 中打开工作表(新的或现有的)时,我都想启动一个 .exe 文件。 我想在打开工作簿时在 .xlam 插件中对这个 .exe 启动部分进行编码。 请告诉我我该怎么做?
【问题讨论】:
标签: vba excel excel-2010
您需要访问 Excel 应用程序的 NewWorkbook 事件,因此您需要在加载插件时设置对 Application 对象的引用。
将以下示例代码放入ThisWorkbook 模块中:
Option Explicit '***** Always use Option Explicit!
Private WithEvents oXl As Application
Private Sub oXl_NewWorkbook(ByVal Wb As Workbook)
'***** Trapping the NewWorkbook event
Call MsgBox("It's me again. (" & oXl.Workbooks.Count & ")", vbInformation, "Hi. Again.")
'***** Your code here!
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'***** Remove reference to oXL object
Set oXl = Nothing
End Sub
Private Sub Workbook_Open()
'***** Set reference to the current Excel application
Set oXl = ThisWorkbook.Application
'***** Testing the oXL object
Call MsgBox("Hello, there! (" & oXl.Workbooks.Count & ")", vbInformation, "Hi")
End Sub
【讨论】:
Workbook_Open 事件。 NewWorkbook 事件也有效。
Workbook_Open 事件。我必须卸载插件才能更改它的 VBA 代码(然后重新加载)。
Workbook 代码模块还是标准代码模块中?后者是行不通的,这将是他们没有为你“命中”的最常见原因。
好的,我做到了! 我只是在现有宏中创建了一个新函数
Private Sub MyMacro
MsgBox "HI"
End Sub
然后,我从 ThisWorkbook 调用了这个函数
Private Sub Workbook_Open()
Run "MyMacro"
Exit Sub
【讨论】:
MsgBox "HI" 移动到Workbook_Open,您可以从另一个答案中获得我的示例。 :) 现在您需要捕获NewWorkbook 事件。重新阅读您的问题,您还需要来自 Application 对象的 WorkbookOpen 事件,以便在打开新工作簿和现有工作簿时运行代码。工作表可能有类似的事件 - WorkbookNewSheet 和 SheetActivate?