VBA - 获取工作簿中的模块

JCh*_*ten 3 excel vba

我正在尝试创建一个用于创建其他 .xlsm 工作簿的工作簿,但无法弄清楚如何获取我需要的模块,以便我可以添加它们。

我的代码如下(根据此处给出的答案进行修改:如何以编程方式添加 excel 2010 宏

我需要帮助的地方是在 ImportModules 子中,通过注释'LIST MODULES HERE

如何获取当前工作簿中的模块数组?

Private Sub SVAmaker_Click()

    Dim file As String
    file = InputBox("SVA Planner file name", "Name", "Name")

    Application.DefaultSaveFormat = xlOpenXMLWorkbookMacroEnabled
    Workbooks.Add
    ActiveWorkbook.SaveAs filename:=file

    Dim WB As Workbook
    WB = ActiveWorkbook
    Call ImportModules(VBA.CStr(WB))

End Sub

Sub ImportModules(sWorkbookname As String)

    Dim cmpComponents As VBIDE.VBComponents
    Dim wbkTarget As Excel.Workbook

    Set wbkTarget = Workbooks.Open(sWorkbookname)

    If wbkTarget.VBProject.Protection = 1 Then
        Debug.Print wbkTarget.Name & " has a protected project, cannot import module"
    GoTo Cancelline
    End If

    Set cmpComponents = wbkTarget.VBProject.VBComponents

    Dim vModules As Variant
    'LIST MODULES HERE

    Dim i As Integer
    For i = LBound(vModules) To UBound(vModules)
        cmpComponents.Import vModules(i)
    Next i

Cancelline:

    If wbkTarget.FileFormat = xlOpenXMLWorkbook Then
        wbkTarget.SaveAs wbkTarget.Name, xlOpenXMLWorkbookMacroEnabled
        wbkTarget.Close SaveChanges:=False
    Else
        wbkTarget.Close SaveChanges:=True
    End If

    Set wbkTarget = Nothing

End Sub
Run Code Online (Sandbox Code Playgroud)

Joe*_*Phi 7

JChristen 要求提供这些模块的列表

我会根据 gizlmo 的建议创建一个集合:

    Dim vbcomp As VBComponent
    Dim modules as Collection

    set modules = new Collection
    For Each vbcomp In ThisWorkbook.VBProject.VBComponents

        'if normal or class module
        If ((vbcomp.Type = vbext_ct_StdModule) _
             Or _
            (VBComp.Type = vbext_ct_ClassModule)) Then 

           modules.add VBcomp.name

        End If
    Next vbcomp
Run Code Online (Sandbox Code Playgroud)

稍后您可以像这样使用这个集合:

    Dim module     as Variant
    for each module in modules
        ' e.g. importing the module 
        import module
    next module
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你