要用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


发表评论