2012-03-22 63 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

相關問題