包括;本工作手册;Excel加载项中的代码

包括;本工作手册;Excel加载项中的代码,excel,vba,Excel,Vba,我正在创建VBA Excel加载项。我要求使用“工作簿\工作表更改”子项。是否可以将此代码作为外接程序的一部分,以便使用包含用户定义函数的外接程序的所有工作簿都可以访问在工作表更改中执行的代码 文件保存为.XLA外接程序。但是,“工作簿\u SheetChange”在模块中不起作用,必须位于文件的ThisWorkbook代码部分。因此,它目前没有随我的外接程序结转。您的外接程序中需要一个自定义类模块,该模块有一个用事件声明的应用程序变量。我通常称我的班级为“事件” Private WithEve

我正在创建VBA Excel加载项。我要求使用“工作簿\工作表更改”子项。是否可以将此代码作为外接程序的一部分,以便使用包含用户定义函数的外接程序的所有工作簿都可以访问在工作表更改中执行的代码


文件保存为.XLA外接程序。但是,“工作簿\u SheetChange”在模块中不起作用,必须位于文件的ThisWorkbook代码部分。因此,它目前没有随我的外接程序结转。

您的外接程序中需要一个自定义类模块,该模块有一个用事件声明的应用程序变量。我通常称我的班级为“事件”

Private WithEvents mxlApp As Application

Public Property Set App(xlApp As Application)

    Set mxlApp = xlApp

End Property
现在,在代码窗格(Ctrl+F2)的左上角下拉列表中,您有了mxlApp。选择该选项卡,然后在右上角下拉列表中选择SheetChange。你会得到这样的存根

Private Sub mxlApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)

End Sub
如果任何打开的工作簿中任何工作表上的任何单元格发生更改,将触发此事件。您需要添加一些代码,以确保它是您关心的工作表。参数中没有工作簿名称,但可以使用
Sh.Parent
访问工作簿

您唯一需要做的另一件事是创建类。在标准模块中

Public gclsAppEvents As CAppEvents

Sub Auto_Open()

    Set gclsAppEvents = New CAppEvents
    Set gclsAppEvents.App = Application

End Sub
当加载外接程序时,将变量设置为public将使其保持在范围内。第一次打开工作簿时,名为Auto_Open的标准模块中的任何子模块都将运行。

这解决了我的问题

代码添加到.xlam中

dim currentworkbook as Workbook
set currentworkbook = activeworkbook
然后将所有要链接到当前工作簿的变量设置为currentworkbook

然后就会运转良好


不要使用此工作簿,因为它会将您的.xlam文件定位为此工作簿,而不是您真正想要运行它的工作簿。

您能否澄清您是在使用excel的内置vba模块,还是在使用visual studio的vb.net创建带有功能区和类似内置模块的外接程序?外接程序所做的唯一事情就是为所有用户引入用户定义的函数我还不清楚你的目标是什么。你能用问题句中的几句话来澄清吗?我发现了一个链接VBA插件,你把这个项目保存为.xLA吗?file@tommyDDD当您选择一列(通过单击列标题)并按
DEL
键删除整个列的内容时,我已更新了问题,调用
mxlApp\u SheetChange
过程时,会使用包含数百万个单元格的范围,即使实际更改的单元格只是少数。然后,在这数百万个单元格上进行迭代需要很长时间,以至于Excel停止响应,而唯一的解决方法就是终止整个Excel过程。