The capabilities of the printer via its drivers will determine the capabilities of the Printer object in VBA.
I prefer to use VBA and go after a printer name vs. port name. If you have tight enough control on printer names during the installation of hardware you can hard code your VBA using the printer name. Use error trapping that allows the user to select an available printer in case the hard coded printer is offline.
It has been a while and I would have to look for examples of working code to interact with reports and adjust printer properties.
To get you started, here is some code to enumerate available printers. You can instantaite a printer object and adjust its behavior through its proerties. Set the report's printer to = the instantiated object and then print the report.
Code:
Dim prtMyPrinter As Printer
Dim prtName As Printer
Dim intIndex As Integer
intIndex = 0
For Each prtName In Application.Printers
With prtName
Debug.Print "Index: " & intIndex & vbCr _
& "Device name: " & .DeviceName & vbCr _
& "Driver name: " & .DriverName & vbCr _
& "Port: " & .Port & vbCr _
& "*****************************************************************"
End With
intIndex = intIndex + 1
Next
Set prtMyPrinter = Application.Printers.Item(0)
Debug.Print "The first printer in the list with index zero is named" & vbCr _
& prtMyPrinter.DeviceName & vbCr _
& "*****************************************************************"
Set prtMyPrinter = Nothing
Set prtMyPrinter = Application.Printers.Item(1)
Debug.Print "The second printer in the list with index one is named" & vbCr _
& prtMyPrinter.DeviceName & vbCr _
& "*****************************************************************"
Set prtMyPrinter = Nothing
Another approach is to make a separate report for each printer and set of business rules. Each report object would have the printer properties set in stone.