ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Active Printer Application (https://www.excelbanter.com/excel-programming/319047-active-printer-application.html)

Larry

Active Printer Application
 
I have a workbook with a VB code to choose a non-network printer and print a
document. The application code currently being used is:

Application.ActivePrinter = "hp photosmart p1110 series on LPT1:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"hp photosmart p1100 series on LPT1:", Collate:=True

This code works very well for this particular printer connected by parallel
cable to this particular port. However, I need an application syntax which
will work universally for any hp photosmart printer, disregarding any
particular model or whether it is a parallel or USB connection. Any
suggestions? Thanks for your help.

Jim Rech

Active Printer Application
 
You might try this code which attempts to return the name of an installed
printer that matches a partial name.


Const PRINTER_ENUM_CONNECTIONS = &H4
Const PRINTER_ENUM_LOCAL = &H2
Declare Function EnumPrinters Lib "winspool.drv" Alias _
"EnumPrintersA" (ByVal flags As Long, _
ByVal xName As String, ByVal Level As Long, _
pPrinterEnum As Long, ByVal cdBuf As Long, _
pcbNeeded As Long, pcReturned As Long) As Long

Declare Function PtrToStr Lib "Kernel32" Alias "lstrcpyA" _
(ByVal RetVal As String, ByVal Ptr As Long) As Long

Declare Function StrLen Lib "Kernel32" Alias "lstrlenA" _
(ByVal Ptr As Long) As Long

Sub TestFunc()
MsgBox GetPrnName("hp photosmart*")
End Sub

Function GetPrnName(Template As String) As String
Dim cbRequired As Long, cbBuffer As Long
Dim Buffer() As Long, nEntries As Long
Dim I As Long, PDesc As String, Try2 As Boolean
cbBuffer = 3000
TryAgain:
ReDim Buffer((cbBuffer \ 4) - 1)
If EnumPrinters(PRINTER_ENUM_CONNECTIONS Or _
PRINTER_ENUM_LOCAL, "", 1, Buffer(0), cbBuffer, _
cbRequired, nEntries) Then
For I = 0 To nEntries - 1
PDesc = Space$(StrLen(Buffer(I * 4 + 2)))
PtrToStr PDesc, Buffer(I * 4 + 2)
If LCase(PDesc) Like LCase(Template) Then
GetPrnName = PDesc
Exit For
End If
Next
Else
If Not Try2 Then
Try2 = True
cbBuffer = cbRequired
GoTo TryAgain
End If
End If
End Function


--
Jim Rech
Excel MVP
"Larry" wrote in message
...
|I have a workbook with a VB code to choose a non-network printer and print
a
| document. The application code currently being used is:
|
| Application.ActivePrinter = "hp photosmart p1110 series on LPT1:"
| ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
| "hp photosmart p1100 series on LPT1:", Collate:=True
|
| This code works very well for this particular printer connected by
parallel
| cable to this particular port. However, I need an application syntax
which
| will work universally for any hp photosmart printer, disregarding any
| particular model or whether it is a parallel or USB connection. Any
| suggestions? Thanks for your help.




All times are GMT +1. The time now is 06:12 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com