2009-04-10 43 views
3

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

+0

你确定错误在设置打印机行吗?我遇到了设置不适用于特定打印机的不同属性的错误。但不在套路上。 – 2009-04-10 14:31:42

+0

是的,它是在“设置打印机”行上。源是行编号,并且错误处理程序将Erl值显示为错误消息的一部分。 – 2009-04-10 14:43:09

回答

3

“无效的过程调用或参数”是一个VB运行时错误5.

我怀疑你看到的错误5是Win32错误代码,这意味着“访问被拒绝”。

显然VB运行时错误不同于Win32错误 - 我怀疑它与VB甚至MS-DOS的根本有关:http://blogs.msdn.com/ericlippert/archive/2004/09/09/227461.aspx。我不确定你应该如何确定使用哪种解释

+0

啊......从来没有想到这一点。相关打印机位于打印服务器上,但用户可以使用其他应用程序进行打印。当尝试“设置打印机= x”时,什么原因导致VB6出现“访问被拒绝”?设置打印机对象是否需要对目标打印机具有某些配置权限? – 2009-04-10 15:06:28

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 
1

我在MS Access 2007 VBA中通过包括服务器名称和打印机名称解决了这个问题。

Application.Printer = Application.Printers("\\servername\printername") 

代替

Application.Printer = Application.Printers("printername") 

希望这可以帮助其他人。

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) 

似的,它的工作

相关问题