2012-03-22 46 views
0

我想用我的爱普生TM U220,因为我在安装WIN 7 64bit和Excel2010的新PC之前没有并行端口。在过去,我用这个简单的代码来打开钱箱:excel bva代码发送命令到USB打印机

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”后打开钱箱commnad没有反应。 经过一些网络研究后,我发现下面的代码应该工作,但它由于某种原因或其他原因不断弹出错误消息。

我引用了我找到的线索并将所有功劳归于“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上安装并行端口,并像以往一样开始使用并行 - 并行电缆。

韩国社交协会提前,加布里埃尔

回答

1

更简单的方法:分享您的USB打印机,然后通过net use映射打印机共享到LPT1:

net use LPT1: \\.\PrinterShareName 

这种方式,你可以尝试让你的旧代码工作。

+0

Tks Turbo J,有没有可能你更具体一些。我的意思是,我认为在“属性”窗口中共享打印机很简单,我应该只写LPT1吗?或整行:净使用LPT1:\\。\ PrinterShareName是必要的(在这种情况下,我的打印机的名称是“票据”,所以如何才能在行中正确的语法现在,我怎样才能发送命令?.. 。使用我的旧代码以相同的方式,调用LPT1端口打开等? – gabriel1957 2012-03-26 17:23:19

+0

嘿Turbo J.我终于从系统人员得到了帮助,最终可以解决这个问题:net use LPT1:\\ PCName \ \ PrinterShareName在命令提示符处给你很大的帮助。Slim and simple。你是我的英雄,谢谢sooo !!!最好的问候,Gabriel – gabriel1957 2012-04-02 22:56:33

相关问题