VBA to copy Module from one Excel Workbook to another Workbook

前端 未结 5 1876
猫巷女王i
猫巷女王i 2020-12-29 12:16

I am trying to copy a module from one excel workbook to another using VBA.

My Code:

\'Copy Macros

Dim comp As Object
Set comp = ThisWorkbook.VBProje         


        
5条回答
  •  遥遥无期
    2020-12-29 13:18

    Sub CopyModule below, receives 3 parameters:

    1.Source Workbook (as Workbook).

    2.Module Name to Copy (as String).

    3.Target Workbook (as Workbook).

    CopyModule Code

    Public Sub CopyModule(SourceWB As Workbook, strModuleName As String, TargetWB As Workbook)
    
        ' Description:  copies a module from one workbook to another
        ' example: CopyModule Workbooks(ThisWorkbook), "Module2",
        '          Workbooks("Food Specials Rolling Depot Memo 46 - 01.xlsm")
        ' Notes:   If Module to be copied already exists, it is removed first,
        '          and afterwards copied
    
        Dim strFolder                       As String
        Dim strTempFile                     As String
        Dim FName                           As String
    
        If Trim(strModuleName) = vbNullString Then
            Exit Sub
        End If
    
        If TargetWB Is Nothing Then
            MsgBox "Error: Target Workbook " & TargetWB.Name & " doesn't exist (or closed)", vbCritical
            Exit Sub
        End If
    
        strFolder = SourceWB.Path
        If Len(strFolder) = 0 Then strFolder = CurDir
    
        ' create temp file and copy "Module2" into it
        strFolder = strFolder & "\"
        strTempFile = strFolder & "~tmpexport.bas"
    
        On Error Resume Next
        FName = Environ("Temp") & "\" & strModuleName & ".bas"
        If Dir(FName, vbNormal + vbHidden + vbSystem) <> vbNullString Then
            Err.Clear
            Kill FName
            If Err.Number <> 0 Then
                MsgBox "Error copying module " & strModuleName & "  from Workbook " & SourceWB.Name & " to Workbook " & TargetWB.Name, vbInformation
                Exit Sub
            End If
        End If
    
        ' remove "Module2" if already exits in destination workbook
        With TargetWB.VBProject.VBComponents
            .Remove .Item(strModuleName)
        End With
    
        ' copy "Module2" from temp file to destination workbook
        SourceWB.VBProject.VBComponents(strModuleName).Export strTempFile
        TargetWB.VBProject.VBComponents.Import strTempFile
    
        Kill strTempFile
        On Error GoTo 0
    
    End Sub
    

    Main Sub Code (for running this code with the Post's data):

    Option Explicit
    
    Public Sub Main()
    
    Dim WB1 As Workbook
    Dim WB2 As Workbook
    
    Set WB1 = ThisWorkbook
    Set WB2 = Workbooks("Food Specials Rolling Depot Memo 46 - 01.xlsm")
    
    Call CopyModule(WB1, "Module2", WB2)
    
    End Sub
    

提交回复
热议问题