在多个文件中替换VBA代码的最佳方法?

时间:2015-10-23 07:57:57

标签: excel vba

我曾经使用过这样的东西:

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文件被保存了。我猜文件太大了或什么的。

有更好的方法吗?

编辑:

问题似乎是frmcls个文件。替换bas文件非常有效

EDIT2:

在某些计算机上,即使bas个文件也无效。

EDIT3(我目前的解决方案): 因此,我目前的解决方案是手动执行一次,记录所有鼠标和键盘输入,然后一遍又一遍地重放。

如果没有正确的解决方案,我计划为此创建一个AutoIt脚本。

1 个答案:

答案 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