VBA/Excel/Access/Word/Windows API/Printer
Содержание
Get default printer information
<source lang="vb">
Private Declare Function GetProfileStringA Lib "kernel32" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long Sub DefaultPrinterInfo()
Dim strLPT As String * 255 Dim Result As String Call GetProfileStringA ("Windows", "Device", "", strLPT, 254) Result = Application.Trim(strLPT) ResultLength = Len(Result) Comma1 = Application.Find(",", Result, 1) Comma2 = Application.Find(",", Result, Comma1 + 1)
" Gets printer"s name
Printer = Left(Result, Comma1 - 1)
" Gets driver
Driver = Mid(Result, Comma1 + 1, Comma2 - Comma1 - 1)
" Gets last part of device line
Port = Right(Result, ResultLength - Comma2) Debug.Print Printer Debug.Print Driver Debug.Print Port
End Sub
</source>
Loop through all printer
<source lang="vb">
Sub TestPrinter()
Dim prtAvailPrinters As Printer For Each prtAvailPrinters In Application.Printers With prtAvailPrinters Debug.Print "Printer name: " & .DeviceName & "Printer driver: " & .DriverName End With Next prtAvailPrinters
End Sub
</source>
Modify Printer Settings
<source lang="vb">
Sub ModifyPrinterSettings()
Dim prtPrinter As Printer Set prtPrinter = Application.Printers(0) prtPrinter.TopMargin = 500 prtPrinter.BottomMargin = 250 prtPrinter.LeftMargin = 500 prtPrinter.RightMargin = 500 prtPrinter.Copies = 5
End Sub
</source>
The Printer Object
<source lang="vb">
Private Sub cmdPrinterObject_Click()
Dim prt As Printer Set prt = Printers(0) Debug.Print prt.DeviceName Debug.Print prt.Port Debug.Print prt.ColorMode Debug.Print prt.Copies
End Sub
</source>
The Printers Collection
<source lang="vb">
Private Sub cmdPrintersCollection_Click()
Dim prt As Printer For Each prt In Printers Debug.Print prt.DeviceName Debug.Print prt.Port Next prt
End Sub
</source>