我正在尝试使用我的 Epson TM U220,就像在安装带有 WIN 7 64 位和 Excel2010 的新 PC 之前所做的那样,没有并行端口。过去我使用这个简单的代码来打开现金抽屉:
Sub drawer_opener()
Open "LPT1" For Output As #1
Print #1, Chr(27) + Chr(112) + Chr(0) + Chr(25) + Chr(250)
Close #1
End Sub
现在我使用的是并行 USB 适配器,但在将代码中的“LPT1”更改为“USB001”后,打开钱箱命令没有响应。经过一些网络研究后,我发现以下代码应该可以工作,但由于某种原因它不断弹出错误消息。
我引用了我找到的线程并将所有功劳归功于“Mike”引用正如您所发现的那样,这种方法不适用于 USB 打印机。请尝试以下操作。我假设 USB 打印机设置为您的默认打印机(尽管如果不是,可以添加代码来查找它)当然您还需要检查您的新打印机是否遵循相同的控制以与您的旧代码相同的方式进行编码。
麦克风
Option Explicit
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 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 Type DOCINFO
pDocName As String
pOutputFile As String
pDatatype As String
End Type
Private Sub Command1_Click()
Dim printerHandle As Long, retVal As Long
Dim bytesWritten As Long, lDoc As Long
Dim s1 As String, MyDocInfo As DOCINFO
retVal = OpenPrinter(Printer.DeviceName, printerHandle, 0)
If retVal = 0 Then
MsgBox "Printer Not found"
Exit Sub
End If
MyDocInfo.pDocName = "Any Name"
MyDocInfo.pOutputFile = vbNullString
MyDocInfo.pDatatype = vbNullString
lDoc = StartDocPrinter(printerHandle, 1, MyDocInfo)
Call StartPagePrinter(printerHandle)
s1 = Chr(27) + Chr(112) + Chr(0) + Chr(25) + Chr(250)
retVal = WritePrinter(printerHandle, ByVal s1, _
Len(s1), bytesWritten)
retVal = EndPagePrinter(printerHandle)
retVal = EndDocPrinter(printerHandle)
retVal = ClosePrinter(printerHandle)
End Sub
取消报价
我恳请你们中的一些专家尝试代码,看看它是否不适用于 Excel2010,如果它实际上不是 VBA 或者是什么问题。此外,如果没有希望通过软件(代码)解决方案向 Epson 打印机发送命令,我必须在 PC 中安装并行端口并像过去一样开始使用并行并行电缆。
提前谢谢,加布里埃尔