我想创建一个excel Add,其中会创建一些额外的工具栏和菜单按钮。 但我希望只在打开特定工作簿时加载此插件。如果任何其他工作簿打开,我不想加载Addin。
我想知道解决此问题的可行方法是什么,以及实现此Add in(XLA或VSTO或COM Addin)的最佳方法是什么。
我不希望用户知道我的Addin路径,加载/初始化插件所需的VbA代码。
答案 0 :(得分:7)
这听起来像是VSTO Document项目的一个好例子;与扩展整个应用程序的加载项不同,因此适用于任何打开的文档,VSTO文档项目是特定文档的自定义,附加了额外的代码。
答案 1 :(得分:4)
在开头创建工具栏,但将工具栏可见性设置为false。使用AddIn.Application.WorkbookOpen事件的事件处理程序捕获正在打开的工作簿,并确定工作簿是否是您想要的特定工作簿。此时,您可以设置工具栏的可见性。
如果活动工作簿不是特定工作簿,您还可以捕获AddIn.Application.WorkbookActivate事件并再次隐藏工具栏。
请记住在ThisAddIn级别声明一个成员变量以保持对工具栏的引用!
答案 2 :(得分:2)
如果您真的只想在某个工作簿打开时加载插件,为什么不在相关工作簿的Open事件中加载它
' code in the ThisWorkbook module
Private Sub Workbook_Open()
Dim wb As Workbook
On Error Resume Next
Set wb = Workbooks("myAddin.xla")
If wb Is Nothing Then
Set wb = Application.Workbooks.Open("c:\path\myAddin.xls")
End If
End Sub
或者,任何其他工作簿或插件都可以包含代码以捕获Excel应用程序级别事件,例如Workbook.Open,如果新打开的工作的名称是您感兴趣的工作,则执行任何操作,即加载Addin