3

我有一个 VB6 应用程序,当程序尝试将 Printers 对象设置为 Printers 集合中的特定打印机时,它给出错误 5“无效的过程调用或参数”。有问题的打印机是某种通过打印服务器运行的复印机/打印机。将 Printer 对象设置为集合中定义的其他打印机时,不会发生该错误。在这种情况下可能导致错误 5 的任何想法?我不确定在 VB6 中使用“Set Printer = x”语句时究竟会发生什么 - 它是否正在尝试与实际的打印机驱动程序交互?是否有可能由于某种原因驱动程序未被 VB6 打印机对象识别为有效打印机,从而导致“无效参数”错误?

4

5 回答 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

您可能想查看以下页面:

http://support.microsoft.com/kb/322710

每当在 VB6 中打印时,我总是使用此对话框而不是 VB6 附带的常用对话框。它更可靠。

于 2009-04-14T19:47:45.767 回答