「無効なプロシージャ呼び出しまたは引数」プリンタオブジェクトの設定
質問
私は、プログラムがPrintersコレクションから特定のプリンタにプリンタオブジェクトを設定しようと、「無効なプロシージャ呼び出しまたは引数」エラー5を与えているVB6アプリケーションを持っています。問題のプリンタは、プリントサーバを介して実行されているコピー機/プリンタのいくつかの並べ替えです。コレクションで定義された他のプリンタにプリンタオブジェクトを設定する際にエラーが発生しません。この状況で、エラー5を引き起こしている可能性がありますどのような任意のアイデア?それはその時点で実際のプリンタドライバとのインタフェースしようとしている - 私は、VB6の「設定プリンタ= x」の文を使用した場合、正確に何が起こるかわからないんだけど?それは、「無効な引数」エラーが発生し、ドライバが何らかの理由でVB6 Printerオブジェクトによって有効なプリンタとして認識されていないことは可能ですか?
解決
「無効なプロシージャ呼び出しまたは引数は、」VBランタイムエラー5です。
私はあなたが見ている5エラーは、「アクセスが拒否されました」を意味するWin32エラーコード、であることを疑うます。
どうやらVBのランタイムエラーは、Win32エラーと異なる - 私はそれもMS-DOSより以前のVBの根に関係していると思われる:<のhref = "http://blogs.msdn.com/ericlippert/archive/2004 /09/09/227461.aspx」のrel = "nofollowをnoreferrer"> http://blogs.msdn.com/ericlippert/archive/2004/09/09/227461.aspx を。私はあなたが使用する解釈を決定することになっているかわからないとき
他のヒント
あなたはそれが正しい設定するには、このようなコードを使用していますか? 単なる文字列でそれを設定しようとしていない?
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
私は、プリンタ名と一緒にサーバー名を含めることによって、MS Access 2007のVBAでこの問題を解決します。
Application.Printer = Application.Printers("\\servername\printername")
の代わりに
Application.Printer = Application.Printers("printername")
これは他の誰かに役立ちます願っています。
私はこのエラーを取得し、フラストレーションの数時間後に私の答えを見つけました。これは、大文字と小文字が区別問題でした。私は小文字の「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)
それが働いていたさきがけ
あなたは以下のページを見てみたいことがあります:
http://support.microsoft.com/kb/322710する
VB6で印刷するたびに私はいつもこのダイアログボックスの代わりに、VB6に付属してコモンダイアログボックスを使用します。これは、より多くの信頼性があります。