如何直接从插件调用子插件

所以编写代码通过VBA代码调用附加库中的子/函数显然很容易,

call myFunctionOrSub 

但是,有没有办法让用户直接调用加载项中的公共subs? 例如,当用户进入工具 – >macros,并拉起这个屏幕:

宏选择

我想添加到该框中的macros的列表中的所有子插件包含在链接到该文件的插件。 也就是说,我有一个当前工作簿引用的库(library.xlam)。 在这个library.xlam文件中,我有Subs(如copyToResults)。 我希望copyToResults在此列表中显示为可运行的macros。 有没有办法做到这一点?

我能想出的唯一解决scheme是在我的testing文件中为library.xlam中的每个Sub创build一个Sub。 testing文件中的这个Sub将不会通过调用库的Sub来做任何事情。 然而,这对于外部库的可扩展性来说太可怕了,所以我们绝对不想走这条路。

  1. 在列表框中用你的xlam制作一个表格。
  2. 使用这个post中的脚本来填充你的表单。 你将不得不改变一些Excel设置。 获取一个模块的macros在Excel中的列表,然后调用所有这些macros

这是我的表单中的代码:

 Private Sub btnCancel_Click() Unload Me End Sub Private Sub btnExecute_Click() Application.Run "macros.xlam!" & lstMacros.Value Unload Me End Sub Private Sub UserForm_Initialize() Dim pj As VBProject Dim vbcomp As VBComponent Dim curMacro As String, newMacro As String Dim x As String Dim y As String Dim macros As String On Error Resume Next curMacro = "" Documents.Add For Each pj In Application.VBE.VBProjects For Each vbcomp In pj.VBComponents If Not vbcomp Is Nothing Then If Not vbcomp.CodeModule = "Utilities" Then For i = 1 To vbcomp.CodeModule.CountOfLines newMacro = vbcomp.CodeModule.ProcOfLine(Line:=i, _ prockind:=vbext_pk_Proc) If curMacro <> newMacro Then curMacro = newMacro If curMacro <> "" And curMacro <> "app_NewDocument" Then frmMacros.lstMacros.AddItem curMacro End If End If Next End If End If Next Next End Sub 

最后我的样子是这样的: macros表格