Change the default printer

 2009-09-15    Printing    5    306

This example macro shows how to print a selected document to another printer then the default printer. This is done by changing the property Application.ActivePrinter:

Sub PrintToAnotherPrinter()
Dim strCurrentPrinter As String
    strCurrentPrinter = Application.ActivePrinter ' store the current active printer
    On Error Resume Next ' ignore printing errors 
    Application.ActivePrinter = "microsoft fax on fax:" ' change to another printer
    ActiveSheet.PrintOut ' print the active sheet
    Application.ActivePrinter = strCurrentPrinter ' change back to the original printer
    On Error Goto 0 ' resume normal error handling
End Sub

Print to a network printer

The example macros below shows how to get the full network printer name (useful when the network printer name can change) and print a worksheet to this printer:

Sub PrintToNetworkPrinterExample()
Dim strCurrentPrinter As String, strNetworkPrinter As String
    strCurrentPrinter = Application.ActivePrinter ' save the current active printer
    strNetworkPrinter = GetNetworkPrinterName("HP LaserJet 8100 Series PCL", True)
    If Len(strNetworkPrinter) > 0 Then ' found the network printer (and activated it)
        Worksheets(1).PrintOut ' print something
        ' change back to the previously active printer
        Application.ActivePrinter = strCurrentPrinter
    End If
End Sub

Function GetNetworkPrinterName(strNetworkPrinterName As String, Optional blnChangePrinter As Boolean = False) As String
' returns the full network printer name
' returns an empty string if the printer is not found
' changes the active printer if blnChangePrinter is True
' example: GetNetworkPrinterName("HP LaserJet 8100 Series PCL")
' example result: "HP LaserJet 8100 Series PCL on Ne04:"
Dim strCurrentPrinter As String, strTempPrinter As String, i As Long
    strCurrentPrinter = Application.ActivePrinter
    i = 0
    Do While i < 100
        On Error Resume Next ' try to change to the network printer
        Select Case Application.International(xlCountryCode)
            Case 47
                strTempPrinter = strNetworkPrinterName & " på Ne" & Format(i, "00") & ":" ' norwegian
            Case Else
                strTempPrinter = strNetworkPrinterName & " on Ne" & Format(i, "00") & ":" ' english
        End Select
        Application.ActivePrinter = strTempPrinter
        On Error GoTo 0
        If Application.ActivePrinter = strTempPrinter Then
            GetNetworkPrinterName = strTempPrinter ' the network printer was found
            If Not blnChangePrinter Then
                On Error Resume Next
                Application.ActivePrinter = strCurrentPrinter ' change back to the original printer
                On Error GoTo 0
            End If
            i = 100 ' makes the loop end
        End If
        i = i + 1
    Loop
End Function