2009-04-10 46 views
3

我有一個VB6應用程序在程序試圖從打印機集合中將打印機對象設置爲特定的打印機時出現錯誤5「無效的過程調用或參數」 。有問題的打印機是通過打印服務器運行的某種複印機/打印機。將打印機對象設置爲集合中定義的其他打印機時,不會發生該錯誤。任何想法在這種情況下可能導致錯誤5?我不確定在VB6中使用「Set Printer = x」語句時究竟發生了什麼 - 是否嘗試在此時與實際的打印機驅動程序進行交互?由於某種原因,驅動程序可能無法被VB6 Printer對象識別爲有效的打印機,從而導致「無效參數」錯誤?設置打印機對象時出現「無效的過程調用或參數」

+0

你確定錯誤在設置打印機行嗎?我遇到了設置不適用於特定打印機的不同屬性的錯誤。但不在套路上。 – 2009-04-10 14:31:42

+0

是的,它是在「設置打印機」行上。源是行編號,並且錯誤處理程序將Erl值顯示爲錯誤消息的一部分。 – 2009-04-10 14:43:09

回答

3

「無效的過程調用或參數」是一個VB運行時錯誤5.

我懷疑你看到的錯誤5是Win32錯誤代碼,這意味着「訪問被拒絕」。

顯然VB運行時錯誤不同於Win32錯誤 - 我懷疑它與VB甚至MS-DOS的根本有關:http://blogs.msdn.com/ericlippert/archive/2004/09/09/227461.aspx。我不確定你應該如何確定使用哪種解釋

+0

啊......從來沒有想到這一點。相關打印機位於打印服務器上,但用戶可以使用其他應用程序進行打印。當嘗試「設置打印機= x」時,什麼原因導致VB6出現「訪問被拒絕」?設置打印機對象是否需要對目標打印機具有某些配置權限? – 2009-04-10 15:06:28

2

您是否正在使用類似這樣的代碼來設置它的正確性? 不只是試圖用一個字符串來設置它?

Dim strDeviceName As String 
    Dim prnCurrent As Printer 

    For Each prnCurrent In Printers 

     If UCase$(prnCurrent.DeviceName) = strDeviceName Then 

     Set Printer = prnCurrent 

     Exit For 

     End If 

    Next prnCurrent 

爲了停止更改默認打印機,請在設置打印機之前運行此代碼。然後,您不必設置默認打印機。這也使您的打印機選擇對您的程序是唯一的,這是大多數人想要的。

' deassociate printer object from default system printer 
Printer.TrackDefault = False 
1

我在MS Access 2007 VBA中通過包括服務器名稱和打印機名稱解決了這個問題。

Application.Printer = Application.Printers("\\servername\printername") 

代替

Application.Printer = Application.Printers("printername") 

希望這可以幫助其他人。

1

我得到這個錯誤,經過幾個小時的挫折發現我的答案。這是一個大小寫敏感的問題。當我有一個小寫字母「s」時,我有一個資本「S」。

所以當代碼是這樣的:

XeroxReport = "\\Share\Red Xerox 430" 
Set Application.Printer = Application.Printers(XeroxReport) 

我會得到錯誤5

但是,當我把它改爲:

XeroxReport = "\\share\Red Xerox 430" 
Set Application.Printer = Application.Printers(XeroxReport) 

似的,它的工作

相關問題