Exporting array of tabs to new workbooks, save them based on tab name Brief:

This is a question geared towards optimization and general better coding practices. I'm self-taught in VBA so I'm cautious of bad practices, but they do come up. 

My Reasoning:

I break the links (break_links) because these new files would be sent out and I don't want the external references to cause errors within the spreadsheet formulas. It also makes for better historical files IMO so as the main file is updated we have the historical numbers saved rather than referencing the new numbers. 

I did take this component from somewhere online, so I'm still unsure how things work when you put something like (ByRef wb As Workbook) into the sub name ie: when to do it, how to do it, etc.

The Name reference is a cell that has a fiscal year and period labeled for historical files.

My Complaint:

Despite turning off screen updating and all that it still works like a clunky recorded macro where I sit for about 20-30 seconds while it does it's thing, and I'm just exploring to see if there's anything I can do to improve this.

Sub NewWorkbooks()
'This will make seperate workbooks for each of the tabs listed
Dim wb As Workbook
Dim NewBook As Workbook
Dim ws As Worksheet
Dim Name As String
Name = ActiveWorkbook.Worksheets("Reference Tables").Range("_Name")

Call TurnOffFunctions
Set wb = ActiveWorkbook

For Each ws In Workbooks("P&amp;L Master Sheet"). _
Worksheets(Array("Accessories", "Leather", "Residential", "Rugs"))
    ws.Copy
    Set NewBook = ActiveWorkbook
    With NewBook
        Call break_links(NewBook)
        .SaveAs Filename:="C:\Users\Monthly P&amp;L's\Historical Files\" &amp; "P&amp;L " &amp; Name &amp; " - " &amp; ws.Name
        .Close 'SaveChanges:=True
    End With
Next

Call TurnOnFunctions

End Sub
Sub break_links(ByRef wb As Workbook)
Dim Links As Variant
On Error Resume Next
Links = wb.LinkSources(Type:=xlLinkTypeExcelLinks)
On Error GoTo 0

If Not IsEmpty(Links) Then
    For i = 1 To UBound(Links)
        wb.BreakLink _
        Name:=Links(i), _
        Type:=xlLinkTypeExcelLinks
    Next i
End If

End Sub
Private Sub TurnOffFunctions()

    Application.ScreenUpdating = False
    Application.DisplayStatusBar = False
    Application.DisplayAlerts = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

End Sub
Private Sub TurnOnFunctions()

    Application.ScreenUpdating = True
    Application.DisplayStatusBar = True
    Application.DisplayAlerts = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True

End Sub
I do have a few suggestions:


First of all, you don't need to reactivate your main
workbook every loop, since you hold it's reference in a variable
anyway.
Second, instead of creating new workbook and copying the sheet over, just make a copy to new workbook (i.e. wks.Copy creates copy in new workbook, you can then assign it to a variable since, as you said yourself, it is now the active workbook)
Lastly, unless you want to remove the references (for example if the links contain sensitive information), then I wouldn't worry about it. Excel stores the last value from links in cache within the file.


Depending on your setup, suggestion 2 might actually speed it up a little by reducing the number of actions.

To copy sheet to new workbook, simply ws.Copy, then you can set newWs = Activesheet (or using your naming set NewBook = Activeworkbook) to save it's reference, or just skip that also and put Activeworkbook into your With.