我曾经使用过这样的东西:
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
文件的替换工作完美。
编辑2:
在某些机器上,甚至 bas
文件都不起作用。
EDIT3(我目前的解决方案): 所以我目前的解决方案是简单地手动完成一次并记录所有鼠标和键盘输入,然后一遍又一遍地重放。
如果没有合适的解决方案,我计划为此创建一个 AutoIt 脚本。
最佳答案
您将不得不导出/导入组件,因为并非所有行都暴露给 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
关于excel - 替换多个文件中的 VBA 代码的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33297445/