【发布时间】:2011-09-16 16:07:35
【问题描述】:
我正在尝试使用 VBA 代码打印到 Epson 打印机,但没有成功。使用 VB6,我有以下代码,它工作得很好:
Printer.Print "Hello"
Printer.EndDoc
我的问题是我在 VBA 中看不到 Printer 对象(使用 MS Access 宏)。 我必须包含特定的参考吗?如果是,那会是什么?这样我就在同一台机器上安装了 VB6 运行时。
【问题讨论】:
我正在尝试使用 VBA 代码打印到 Epson 打印机,但没有成功。使用 VB6,我有以下代码,它工作得很好:
Printer.Print "Hello"
Printer.EndDoc
我的问题是我在 VBA 中看不到 Printer 对象(使用 MS Access 宏)。 我必须包含特定的参考吗?如果是,那会是什么?这样我就在同一台机器上安装了 VB6 运行时。
【问题讨论】:
您不能从 MS Access 执行此操作,但 KB154078 显示的 VBA 代码可以使用 Win32 API 直接与打印假脱机程序通信并将原始数据发送到打印机:
Option Explicit
Private Type DOCINFO
pDocName As String
pOutputFile As String
pDatatype As String
End Type
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal _
hPrinter As Long) As Long
Private Declare Function EndDocPrinter Lib "winspool.drv" (ByVal _
hPrinter As Long) As Long
Private Declare Function EndPagePrinter Lib "winspool.drv" (ByVal _
hPrinter As Long) As Long
Private Declare Function OpenPrinter Lib "winspool.drv" Alias _
"OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, _
ByVal pDefault As Long) As Long
Private Declare Function StartDocPrinter Lib "winspool.drv" Alias _
"StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _
pDocInfo As DOCINFO) As Long
Private Declare Function StartPagePrinter Lib "winspool.drv" (ByVal _
hPrinter As Long) As Long
Private Declare Function WritePrinter Lib "winspool.drv" (ByVal _
hPrinter As Long, pBuf As Any, ByVal cdBuf As Long, _
pcWritten As Long) As Long
Private Sub Command1_Click()
Dim lhPrinter As Long
Dim lReturn As Long
Dim lpcWritten As Long
Dim lDoc As Long
Dim sWrittenData As String
Dim MyDocInfo As DOCINFO
lReturn = OpenPrinter(Printer.DeviceName, lhPrinter, 0)
If lReturn = 0 Then
MsgBox "The Printer Name you typed wasn't recognized."
Exit Sub
End If
MyDocInfo.pDocName = "AAAAAA"
MyDocInfo.pOutputFile = vbNullString
MyDocInfo.pDatatype = vbNullString
lDoc = StartDocPrinter(lhPrinter, 1, MyDocInfo)
Call StartPagePrinter(lhPrinter)
sWrittenData = "How's that for Magic !!!!" & vbFormFeed
lReturn = WritePrinter(lhPrinter, ByVal sWrittenData, _
Len(sWrittenData), lpcWritten)
lReturn = EndPagePrinter(lhPrinter)
lReturn = EndDocPrinter(lhPrinter)
lReturn = ClosePrinter(lhPrinter)
End Sub
KB175083 中给出了另一个示例。
【讨论】:
SelectObject 和 CreateFont。