在 Excel VBA 中访问打印机对象的替代方法



我正在尝试将原始数据(ZPL(发送到Excel VBA中的选定打印机。我已经在不同的 Ms Access 项目中成功地完成了此操作,但现在我需要在 Excel 项目中使用相同的功能。我能够通过在我的 Excel VBA 项目中引用 Access 对象库来使用相同的代码,并且它按预期工作。问题是工作簿以后可以在未安装 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

如果没有引用访问对象库,我在"将 defprt 暗淡为打印机"时出现错误 - Excel 对象库中似乎没有打印机这样的对象。有没有其他方法可以访问Excel中的打印机?朝这个方向的任何指示都会非常有帮助。谢谢你的时间。

您根本没有对该打印机对象执行任何操作。只需省略该行。

您似乎已经找到了使用 WinAPI 连接到打印机的必要代码,所以我不确定您希望我们做什么。

我相信你的hPrinter应该是一个LongPtr,但只要你使用32位Access,它们是一样的。

最新更新