Excel将模块/用户表单复制到由macros创build的新工作簿

这是我一直试图解决的一个问题。 我有一个macros创build一个新的工作簿基于已经从主工作簿(名为CSJ_Master)复制的一些工作表。 但是,我意识到modules / userforms没有被复制过来,所以当我把macros创build的文件发送给其他人的时候,他们不能使用我放在工作簿中的macros分配的button。 以下是我使用一些在线教程拼凑在一起(注意:这是一个用户窗体代码):

Private Sub CommandButton1_Click() Dim iRow As Long Dim ws As Worksheet Set ws = Worksheets("Data List") 'find first empty row in database iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1 'check for a Name number If Trim(Me.ProjectName.Value) = "" Then Me.ProjectName.SetFocus MsgBox "Please complete the form" Exit Sub End If 'copy the data to the database ws.Cells(iRow, 1).Value = Me.ProjectName.Value ws.Cells(iRow, 2).Value = Me.ProjectNumber.Value ws.Cells(iRow, 3).Value = Me.SPVComp.Value ws.Cells(iRow, 4).Value = Me.Contact.Value ws.Cells(iRow, 5).Value = Me.ProjMan.Value ws.Cells(iRow, 6).Value = Me.PODate.Value ws.Cells(iRow, 7).Value = Me.PONumber.Value ws.Cells(iRow, 8).Value = Me.PRNumber.Value ws.Cells(iRow, 9).Value = Me.EstTime.Value MsgBox "Data added", vbOKOnly + vbInformation, "Data Added" ' Delete any old stray copies of the module1 On Error Resume Next Kill ("C:\MrXL1.bas") On Error GoTo 0 ' Export Modules ActiveWorkbook.VBProject.VBComponents(Array("Module1", "Module2", "Module3", "Module4", "Module5", "Module6", "Module7", "Module8", "Module9", "Module10", "Module11", "Module12", "UserForm1", "Userform2")).Export ("c:\MrXL1.bas") Sheets(Array("Document Data", "Invoice data", "Hours", "Summary", "Invoice")).Copy fname = Application.GetSaveAsFilename(InitialFileName:=Me.ProjectName.Value, FileFilter:="Excel Files (*.xlsm), *.xlsm") ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=52 Application.VBE.ActiveVBProject.VBComponents.Import ("c:\MrXL1.bas") 'clear the data Me.ProjectName.Value = "" Me.ProjectNumber.Value = "" Me.SPVComp.Value = "" Me.Contact.Value = "" Me.ProjMan.Value = "" Me.PODate.Value = "" Me.PONumber.Value = "" Me.PRNumber.Value = "" Me.EstTime.Value = "" Me.ProjectName.SetFocus End Sub 

此代码旨在处理来自用户窗体的数据,然后在input它之后创build一个新的工作簿,命名为ProjName的值。 代码工作得很好,除了这一节:

 ' Delete any old stray copies of the module1 On Error Resume Next Kill ("C:\MrXL1.bas") On Error GoTo 0 ' Export Modules ActiveWorkbook.VBProject.VBComponents(Array("Module1", "Module2", "Module3", "Module4", "Module5", "Module6", "Module7", "Module8", "Module9", "Module10", "Module11", "Module12", "UserForm1", "Userform2")).Export ("c:\MrXL1.bas") Sheets(Array("Document Data", "Invoice data", "Hours", "Summary", "Invoice")).Copy fname = Application.GetSaveAsFilename(InitialFileName:=Me.ProjectName.Value, FileFilter:="Excel Files (*.xlsm), *.xlsm") ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=52 Application.VBE.ActiveVBProject.VBComponents.Import ("c:\MrXL1.bas") 

这是复制工作表和模块/用户表单的代码的主要部分,并将其保存到名为ProjName的新工作簿中。 但是,我总是在这一行上得到运行时错误“13”types不匹配:

 ActiveWorkbook.VBProject.VBComponents(Array("Module1", "Module2", "Module3", "Module4", "Module5", "Module6", "Module7", "Module8", "Module9", "Module10", "Module11", "Module12", "UserForm1", "Userform2")).Export ("c:\MrXL1.bas") 

我怎样才能做到这一点呢? 我对VBA相当陌生,大多使用教程来达到这一点,所以如果你能详细解释,那将是不胜感激!