プログラムが Printers コレクションから特定のプリンターにプリンター オブジェクトを設定しようとすると、エラー 5、「無効なプロシージャ コールまたは引数」を与える VB6 アプリケーションがあります。問題のプリンターは、プリントサーバーを介して実行されるある種のコピー機/プリンターです。コレクションで定義されている他のプリンターに Printer オブジェクトを設定すると、エラーは発生しません。この状況でエラー 5 を引き起こしている可能性のあるアイデアはありますか? VB6 で "Set Printer = x" ステートメントを使用すると正確に何が起こるかわかりません。その時点で実際のプリンター ドライバーとのインターフェイスを試みていますか? ドライバーが何らかの理由で VB6 プリンター オブジェクトによって有効なプリンターとして認識されず、「無効な引数」エラーが発生する可能性はありますか?
5 に答える
「無効なプロシージャ コールまたは引数」は、VB ランタイム エラー 5 用です。
表示されているエラー 5 は、「アクセスが拒否されました」を意味する Win32 エラー コードであると思われます。
どうやら VB のランタイム エラーは Win32 のエラーとは異なります。 . どの解釈をいつ使用するかをどのように決定することになっているのかわかりません
このようなコードを使用して正しく設定していますか? 文字列で設定しようとしているだけではありませんか?
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
このエラーが発生し、数時間の欲求不満の後、答えが見つかりました。大文字と小文字が区別される問題でした。小文字の「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)
すぐにそれは働いた
サーバー名とプリンター名を含めることで、MS Access 2007 VBA でこの問題を解決しました。
Application.Printer = Application.Printers("\\servername\printername")
それ以外の
Application.Printer = Application.Printers("printername")
これが他の誰かに役立つことを願っています。