Search code examples
vbaautomationpowerpointcallcalling-convention

SaveAs .xlsx and then open the same saved file (Calling Macros from another saved workbook)


I have this code written to take save as file name from excel range and copy pivot ranges and paste in template workbook (with macro in it) and save file in New Folder.

Now I want to call macro from that workbook in this Macro (which is in another workbook). Is it possible ? TIA

Sub Data()

Dim WB1 As Workbook
Dim WB2 As Workbook
Dim WB3 As Workbook
Dim WB4 As Workbook
Dim Temp As Workbook
Dim fname As String
Dim Path As String

Application.DisplayAlerts = False

Set WB1 = Workbooks.Open("C:/VB Code/WB1 Master.xlsm")
Set WB2 = Workbooks.Open("C:/VB Code/WB2 Master.xlsx")
Set WB3 = Workbooks.Open("C:/VB Code/WB3 Master.xlsx")
Set WB4 = Workbooks.Open("C:/VB Code/WB4 Master.xlsx.xlsx")
Set Temp = Workbooks.Open("C:/VB Code/Template_Blank.xlsm")


WB1.Sheets("Analysis").Range("J1").Copy
Temp.Sheets("PPT").Range("B1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=True, Transpose:=False
 
   WB1.Sheets("Analysis").Range("A11:M71").Copy
   Temp.Sheets("Data").Range("B4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=True, Transpose:=False

WB2.Sheets("Analysis").Range("B17:M17").Copy
Temp.Sheets("Data").Range("X27").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=True, Transpose:=False


WB3.Sheets("Analysis").Range("B9:M9").Copy
Temp.Sheets("Data").Range("X37").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=True, Transpose:=False


WB4.Sheets("Analysis").Range("B6:B17").Copy
Temp.Sheets("Data").Range("X16").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=True, Transpose:=True


Workbooks("Template_Blank.xlsm").Activate

Sheets("PPT").Activate

Range("A1").Activate

ActiveWorkbook.RefreshAll

Path = "C:/VB Code/New folder/"
fname = Range("B1") & ".xlsm"

ActiveWorkbook.SaveAs Filename:=Path & fname
   
Application.DisplayAlerts = True

End Sub

Sub SaveFiles()

Call Data
*** There's a macro in Temp workbook called CreatePPT (which is saved after pasting data from different workbooks), I want to call that Macro here from that saved workbook***

End Sub

Solution

  • Should be close:

    Sub Data()
        Const SAVE_PATH As String = "C:/VB Code/New folder/"
        
        Dim WB1 As Workbook, WB2 As Workbook, WB3 As Workbook, WB4 As Workbook
        Dim Temp As Workbook, fName As String
        
        Application.DisplayAlerts = False
        
        Set WB1 = Workbooks.Open("C:/VB Code/WB1 Master.xlsm")
        Set WB2 = Workbooks.Open("C:/VB Code/WB2 Master.xlsx")
        Set WB3 = Workbooks.Open("C:/VB Code/WB3 Master.xlsx")
        Set WB4 = Workbooks.Open("C:/VB Code/WB4 Master.xlsx.xlsx")
        Set Temp = Workbooks.Open("C:/VB Code/Template_Blank.xlsm")
        
        CopyValues WB1.Sheets("Analysis").Range("J1"), Temp.Sheets("PPT").Range("B1")
        CopyValues WB1.Sheets("Analysis").Range("A11:M71"), Temp.Sheets("Data").Range("B4")
        CopyValues WB2.Sheets("Analysis").Range("B17:M17"), Temp.Sheets("Data").Range("X27")
        CopyValues WB3.Sheets("Analysis").Range("B9:M9"), Temp.Sheets("Data").Range("X37")
        CopyValues WB4.Sheets("Analysis").Range("B6:B17"), Temp.Sheets("Data").Range("X16")
        
        Temp.Activate
        Temp.RefreshAll
        
        With Temp.Sheets("PPT")
            .Select
            .Range("A1").Activate
            fName = .Range("B1") & ".xlsm"
        End With
        
        Temp.SaveAs Filename:=SAVE_PATH & fName
        
        Application.Run "'" & Temp.Name & "'!CreatePPT" 'run Sub in saved file...
           
        Application.DisplayAlerts = True
    
    End Sub
    
    'utility sub for copying values from `rngFrom` to `rngTo`
    Sub CopyValues(rngFrom As Range, rngTo As Range)
        With rngFrom
            rngTo.Resize(.Rows.Count, .Columns.Count).Value = .Value
        End With
    End Sub
    

    Good resource for Application.Run - https://www.rondebruin.nl/win/s9/win001.htm