设置Printer对象时“无效的过程调用或参数”

时间:2009-04-10 14:03:33

标签: vb6 printers

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

5 个答案:

答案 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)

您可能需要查看以下页面:

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

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