Альтернатива для доступа к принтеру объекта в Excel VBA - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь отправить необработанные данные (ZPL) на выбранный принтер в Excel VBA.Я сделал это успешно в разных проектах Ms Access, но теперь мне нужна та же функциональность в проекте Excel.Я могу использовать тот же код, ссылаясь на библиотеку объектов Access в моем проекте Excel VBA, и он работает, как и ожидалось.Проблема заключается в том, что впоследствии книгу можно использовать на компьютерах без установленного Access, и я не могу найти альтернативные объекты.

Private Type DocInfo
    pDocName As String
    pOutputFile As String
    pDatatype As String
End Type

Private Declare PtrSafe Function ClosePrinter Lib "winspool.drv" (ByVal _
   hPrinter As Long) As Long
Private Declare PtrSafe Function EndDocPrinter Lib "winspool.drv" (ByVal 
_
   hPrinter As Long) As Long
Private Declare PtrSafe Function EndPagePrinter Lib "winspool.drv" (ByVal 
_
   hPrinter As Long) As Long
Private Declare PtrSafe Function OpenPrinter Lib "winspool.drv" Alias _
   "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, _
    ByVal pDefault As Long) As Long
Private Declare PtrSafe Function StartDocPrinter Lib "winspool.drv" Alias 
_
   "StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _
   pDocInfo As DocInfo) As Long
Private Declare PtrSafe Function StartPagePrinter Lib "winspool.drv" (ByVal _
   hPrinter As Long) As Long
Private Declare PtrSafe Function WritePrinter Lib "winspool.drv" (ByVal _
   hPrinter As Long, pBuf As Any, ByVal cdBuf As Long, _
   pcWritten As Long) As Long    


Public Function RawPrint(strData As String, ByVal SelectedPrinter As String)
Dim defprt As Printer

Dim lhPrinter As Long
Dim lReturn As Long
Dim lpcWritten As Long
Dim lDoc As Long
Dim sWrittenData As String
Dim mDocInfo As DocInfo
lReturn = OpenPrinter(SelectedPrinter, lhPrinter, 0)

If lReturn = 0 Then
    MsgBox "The Printer is not recognized."
    Exit Function
End If
mDocInfo.pDocName = "ZPl"
mDocInfo.pOutputFile = vbNullString
mDocInfo.pDatatype = vbNullString
lDoc = StartDocPrinter(lhPrinter, 1, mDocInfo)
Call StartPagePrinter(lhPrinter)
sWrittenData = strData
lReturn = WritePrinter(lhPrinter, ByVal sWrittenData, _
Len(sWrittenData), lpcWritten)
lReturn = EndPagePrinter(lhPrinter)
lReturn = EndDocPrinter(lhPrinter)
lReturn = ClosePrinter(lhPrinter)



Exit_RawPrint:
Exit Function



 End Function

Без ссылки на библиотеку объектов доступа я получаю сообщение об ошибке "Dim defprt«Принтер» - в библиотеке объектов Excel, по-видимому, нет такого объекта, как «Принтер».Есть ли альтернативный способ доступа к принтерам в Excel?Любые указатели в этом направлении были бы очень полезны.Спасибо за ваше время.

1 Ответ

0 голосов
/ 22 июня 2019

Вы ничего не делаете с этим объектом принтера.Просто опустите строку.

Кажется, вы уже выяснили необходимый код для подключения к принтеру с помощью WinAPI, поэтому я не уверен, что вы хотите, чтобы мы делали.

Iдействительно, ваш hPrinter должен быть LongPtr, но если вы используете 32-битный доступ, они одинаковы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...