我曾经使用过这样的东西:
Dim vbaComponent As Variant
For Each vbaComponent In inputWorkbook.VBProject.VBComponents
vbaComponent.CodeModule.DeleteLines 1, vbaComponent.CodeModule.CountOfLines
vbaComponent.CodeModule.AddFromFile importComponentFileName
Next vbaComponent
这在一段时间内完美运行但现在崩溃时Excel文件被保存了。我猜文件太大了或什么的。
有更好的方法吗?
编辑:
问题似乎是frm
和cls
个文件。替换bas
文件非常有效。
EDIT2:
在某些计算机上,即使bas
个文件也无效。
EDIT3(我目前的解决方案): 因此,我目前的解决方案是手动执行一次,记录所有鼠标和键盘输入,然后一遍又一遍地重放。
如果没有正确的解决方案,我计划为此创建一个AutoIt脚本。
答案 0 :(得分:1)
你必须导出/导入组件,因为并非所有行都暴露给CodeModule,这里是样本
Private Sub exportImportComponent(Project1 As VBIDE.VBProject, Project2 As VBIDE.VBProject)
Dim i As Long, sFileName As String
With Project1.VBComponents
For i = 1 To .Count
sFileName = "C:\Temp\" & .Item(i).Name
Select Case .Item(i).Type
Case vbext_ct_ClassModule
.Item(i).Export sFileName & ".cls"
Project2.VBComponents.Import sFileName & ".cls"
Case vbext_ct_StdModule
.Item(i).Export sFileName & ".bas"
Project2.VBComponents.Import sFileName & ".bas"
Case vbext_ct_MSForm
.Item(i).Export sFileName & ".frm"
Project2.VBComponents.Import sFileName & ".frm"
Case Else
Debug.Print "Different Type"
End Select
Next
End With
End Sub