Я пытаюсь использовать свой 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, и мне нужно установить параллельный порт на ПК и начать использовать параллельно-параллельный кабель, как в прошлом.
Ткс заранее, Габриэль