Option Explicit
Private Function GetPrinterWithPort(ByVal sPrinterName As String) As String
Dim Reg As Variant, oReg As Object, Str As Variant
Dim Ar() As Variant, RegValue As Variant
Const HKEY_CURRENT_USER = &H80000001
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
With oReg
.enumvalues HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Devices", Str, Ar
.getstringvalue HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Devices", Reg, RegValue
.getstringvalue HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Devices", sPrinterName, RegValue
End With
GetPrinterWithPort = sPrinterName & " sur " & Mid$(RegValue, InStr(RegValue, ",") + 1)
End Function
Sub Tst_PDF()
Dim sPrinter As String, sPDFPrinter As String
sPrinter = Application.ActivePrinter
sPDFPrinter = GetPrinterWithPort("PDFCreator")
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=sPDFPrinter, Collate:=True
Application.ActivePrinter = sPrinter
End Sub