Vb6 &引用;无效的过程调用或参数";设置打印机对象时

Vb6 &引用;无效的过程调用或参数";设置打印机对象时,vb6,printers,Vb6,Printers,我有一个VB6应用程序,当程序试图将Printer对象设置为Printers集合中的特定打印机时,该应用程序出现错误5,“无效的过程调用或参数”。所涉及的打印机是通过打印服务器运行的某种复印机/打印机。将打印机对象设置为集合中定义的其他打印机时,不会发生此错误。你知道在这种情况下是什么导致了错误5吗?我不确定在VB6中使用“Set Printer=x”语句时会发生什么情况-此时是否尝试与实际的打印机驱动程序接口?VB6打印机对象是否可能因为某种原因而无法将驱动程序识别为有效打印机,从而导致“无效

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

该“无效过程调用或参数”用于VB运行时错误5

我怀疑您看到的错误5是Win32错误代码,意思是“访问被拒绝”


显然,VB运行时错误不同于Win32错误-我怀疑这与VB的根甚至早于MS-DOS有关:。我不确定当您使用这样的代码来设置正确的解释时,您应该如何确定使用哪种解释? 不只是试着用一个字符串来设置它

   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

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


无论何时在VB6中打印,我总是使用此对话框,而不是VB6附带的常用对话框。它要可靠得多

我在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)

是否正常

您确定错误在设置的打印机行上?我在设置不适用于特定打印机的不同属性时遇到错误。但不在设置行上。是的,它就在“设置打印机”行上。源为行号,错误处理程序将Erl值显示为错误消息的一部分。是的,应用程序将打印机对象设置为打印机集合中的打印机对象。它将打印机设置为收据打印机,打印收据,然后将打印机设置回默认打印机。如果是复印机,则会发生错误。如果默认打印机不是复印机,则不会发生错误。请参阅我的修订答案-using printer.TrackDefault=False,以避免更改默认打印机,从而避免将其设置回原来的位置。啊。。。我从没想过。有问题的打印机位于打印服务器上,但用户可以使用其他应用程序打印到该打印机。当尝试“设置打印机=x”时,什么会导致VB6获得“拒绝访问”?设置打印机对象是否需要对目标打印机或其他东西拥有一些配置权限?如果用户可以在程序之外访问打印机,我不太倾向于认为这可能是访问被拒绝的问题。错误5几乎可以肯定是VB运行时错误5“无效的过程调用或参数”。执行
Set
语句不会导致Win32错误。使用
Declare
语句进行API调用时,VB6只会出现Win32错误,然后必须通过查看
Err.LastDllError
属性来检测这些错误