如何用vba将某个模块的所有vba代码添加插入到其它模块中?

要用vba将某个模块的所有vba代码添加插入到其它模块中,需要按照以下步骤:

  1. 获取要复制的代码所在的组件的CodeModule对象;
  2. Lines属性获取该组件的CodeModule对象的所有代码,其中第一行代码的行号为1;
  3. 获取要插入代码的组件的的CodeModule对象;
  4. AddFromString方法添加步骤2中获取的代码,AddFromString方法添加的代码将插入在组件代码第一个子过程中的前面,如果组件中没有任何代码,则添加在最后。

以下示例代码可以将所有组件中的代码添加插入到当前模块中:

Sub QQ1722187970()
   Dim oCM As CodeModule
   Dim oVC As VBComponent
   Dim oCMActive As CodeModule
   Set oVC = Excel.Application.VBE.SelectedVBComponent
   Set oCMActive = oVC.CodeModule
   sName = oVC.Name
   For Each oVC In Excel.ThisWorkbook.VBProject.VBComponents
     With oVC
        Debug.Print .Name
        '过滤当前选中的组件
        If .Name <> sName Then
            Set oCM = .CodeModule
            With oCM
                    '获取所有的代码行数
                    ILine = .CountOfLines
                    If ILine > 0 Then
                        '获取所有的代码
                        strCode = .Lines(1, ILine)
                        '添加代码
                        oCMActive.AddFromString strCode
                    End If
            End With
         End If
    End With
   Next
End Sub

以下示例代码可以将指定组件(名为modCommon)中的所有代码插入到指定的组件(第一个工作表)中:

Sub QQ1722187970()
'   Dim oCM As CodeModule
'   Dim oVC As VBComponent
'   Dim oCMActive As CodeModule
   Dim oWK As Worksheet
   Set oWK = Excel.ThisWorkbook.Worksheets(1)
   sName1 = oWK.CodeName
   Set oVC1 = Excel.ThisWorkbook.VBProject.VBComponents(sName1)
   sName2 = "modCommon"
   Set oVC2 = Excel.ThisWorkbook.VBProject.VBComponents(sName2)
   Set oCM1 = oVC1.CodeModule
   Set oCM2 = oVC2.CodeModule
   With oCM1
        '获取所有的代码行数
        ILine1 = .CountOfLines
        '先删除之前的代码
        .DeleteLines 1, ILine1
        ILine2 = oCM2.CountOfLines
        '获取所有的代码
        strCode = oCM2.Lines(1, ILine2)
        '添加代码
        oCM1.AddFromString strCode
   End With
End Sub
       

发表评论