Excel BVA-код для отправки команды на USB-принтер - PullRequest
0 голосов
/ 22 марта 2012

Я пытаюсь использовать свой Epson TM U220, как я делал до установки нового ПК с 64-битной версией WIN 7 и Excel2010, без параллельного порта. В прошлом я использовал этот простой код, чтобы открыть денежный ящик:

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». После некоторых исследований в Интернете я обнаружил следующий код, который должен работать, но он продолжает выдавать сообщения об ошибках по той или иной причине.

Я цитирую найденную нить и отдаю должное "Майку" котировка Как вы обнаружили, этот подход не будет работать на USB-принтерах. Пытаться следующее вместо. Я предположил, что USB-принтер настроен как ваш принтер по умолчанию (хотя можно добавить код для поиска это если это не так) и, конечно, вам также нужно проверить, что ваш новый Принтер подчиняется тем же контрольным кодам, что и старый.

Mike

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

1011 * Unquote *

Я прошу некоторых из вас, ребята, попробовать этот код и посмотреть, не работает ли он только для Excel2010, если это не VBA или в чем проблема. Также, если с помощью программного (кодового) решения нет надежды отправить команду на принтер Epson, и мне нужно установить параллельный порт на ПК и начать использовать параллельно-параллельный кабель, как в прошлом.

Ткс заранее, Габриэль

1 Ответ

1 голос
/ 24 марта 2012

Более простой подход: предоставьте общий доступ к вашему USB-принтеру, а затем сопоставьте общий ресурс принтера с LPT1: через net use:

net use LPT1: \\.\PrinterShareName

Таким образом, вы можете попытаться заставить ваш старый код работать.

...