我正在尝试创建一个用于创建其他 .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)
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)
希望能帮助到你
| 归档时间: |
|
| 查看次数: |
9740 次 |
| 最近记录: |