题
我有一个 VB6 应用程序,当程序尝试将 Printer 对象设置为 Printers 集合中的特定打印机时,出现错误 5“无效的过程调用或参数”。有问题的打印机是通过打印服务器运行的某种复印机/打印机。将打印机对象设置为集合中定义的其他打印机时,不会发生该错误。有什么想法可能会导致这种情况下的错误 5 吗?我不确定在 VB6 中使用“Set Printer = x”语句时到底会发生什么 - 它是否尝试与实际的打印机驱动程序进行交互?是否有可能由于某种原因驱动程序未被 VB6 打印机对象识别为有效打印机,从而导致“无效参数”错误?
解决方案
“无效的过程调用或参数”是针对 VB 运行时错误 5。
我怀疑您看到的错误 5 是 Win32 错误代码,这意味着“访问被拒绝”。
显然 VB 运行时错误与 Win32 错误不同 - 我怀疑它与 VB 的根源甚至早于 MS-DOS 有关: 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)
似的,它的工作