我有一个 VB6 应用程序,当程序尝试将 Printers 对象设置为 Printers 集合中的特定打印机时,它给出错误 5“无效的过程调用或参数”。有问题的打印机是某种通过打印服务器运行的复印机/打印机。将 Printer 对象设置为集合中定义的其他打印机时,不会发生该错误。在这种情况下可能导致错误 5 的任何想法?我不确定在 VB6 中使用“Set Printer = x”语句时究竟会发生什么 - 它是否正在尝试与实际的打印机驱动程序交互?是否有可能由于某种原因驱动程序未被 VB6 打印机对象识别为有效打印机,从而导致“无效参数”错误?
问问题
7707 次
5 回答
3
“无效的过程调用或参数”是针对 VB 运行时错误 5。
我怀疑您看到的错误 5 是 Win32 错误代码,意思是“访问被拒绝”。
显然 VB 运行时错误与 Win32 错误不同 - 我怀疑它与早于 MS-DOS 的 VB 的根源有关:http: //blogs.msdn.com/ericlippert/archive/2004/09/09/227461.aspx . 我不确定您应该如何确定何时使用哪种解释
于 2009-04-10T14:19:42.717 回答
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
于 2009-04-10T14:37:55.607 回答
1
我在 MS Access 2007 VBA 中通过包含服务器名称和打印机名称解决了这个问题。
Application.Printer = Application.Printers("\\servername\printername")
代替
Application.Printer = Application.Printers("printername")
希望这对其他人有帮助。
于 2010-08-16T16:12:32.110 回答
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)
很快它就奏效了
于 2014-04-22T23:53:40.510 回答
0
于 2009-04-14T19:47:45.767 回答