因此,通过VBA代码编写可以调用附加库中的子/函数的代码显然很容易,只需执行
call myFunctionOrSub
但是,有没有办法允许用户直接调用加载项中的公共子?例如,当用户转到工具 - >宏并拉出这个屏幕:
我想在该框中的宏列表中添加所有包含在链接到该文件的加载项中的Subs。也就是说,我有一个由当前工作簿引用的库(library.xlam)。在这个library.xlam文件中,我有Subs(比如copyToResults)。我希望copyToResults在此列表中显示为可运行的宏。有没有办法做到这一点?
我能想出的唯一解决方案是在我的测试文件中为library.xlam中的每个Sub创建一个Sub。测试文件中的这个Sub不会通过调用库的子进行任何操作。然而,这对于拥有外部库并且可扩展性很差而言非常糟糕,所以我们绝对不想走这条路。
答案 0 :(得分:0)
以下是我表格中的代码:
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 Form