我有一个 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)

似的,它的工作

您可能想看看下面的页面:

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

每当VB6打印我总是使用,而不是随VB6的通用对话框此对话框。这是一个很多更可靠。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top