要用vba将某个模块的所有vba代码添加插入到其它模块中,需要按照以下步骤:
- 获取要复制的代码所在的组件的CodeModule对象;
- 用Lines属性获取该组件的CodeModule对象的所有代码,其中第一行代码的行号为1;
- 获取要插入代码的组件的的CodeModule对象;
- 用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
发表评论