我有一个VB6应用程序,当程序试图从Printers集合中将Printer对象设置为特定的打印机时,会出现错误5“无效的过程调用或参数”。有问题的打印机是通过打印服务器运行的某种复印机/打印机。将Printer对象设置为集合中定义的其他打印机时不会发生此错误。在这种情况下,任何想法可能导致错误5?我不确定在VB6中使用“Set Printer = x”语句时到底发生了什么 - 它是否尝试在此时与实际的打印机驱动程序进行交互?由于某种原因,VB6 Printer对象可能无法将驱动程序识别为有效打印机,从而导致“无效参数”错误吗?
答案 0 :(得分:3)
“无效的过程调用或参数”用于VB运行时错误5。
我怀疑您看到的错误5是Win32错误代码,这意味着“访问被拒绝”。
显然VB运行时错误与Win32错误不同 - 我怀疑它与VB的根源有关甚至在MS-DOS之前:http://blogs.msdn.com/ericlippert/archive/2004/09/09/227461.aspx。
我不确定你应该如何确定使用哪种解释答案 1 :(得分: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
答案 2 :(得分:1)
我通过将服务器名称与打印机名称一起包含在MS Access 2007 VBA中解决了这个问题。
Application.Printer = Application.Printers("\\servername\printername")
而不是
Application.Printer = Application.Printers("printername")
希望这有助于其他人。
答案 3 :(得分: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)
presto it working
答案 4 :(得分:0)