“Llamada a procedimiento o argumento no válido” al configurar objeto Printer
Pregunta
Tengo una aplicación VB6 que está dando un error 5, "llamada a procedimiento o argumento no válido" cuando el programa intenta establecer el objeto de impresora en una impresora específica de la colección de las impresoras. La impresora en cuestión es una especie de copiadora / impresora ejecuta a través de un servidor de impresión. El error no se produce cuando se ajusta el objeto de impresora a otras impresoras definidas en la colección. ¿Alguna idea de lo que podría estar causando el error 5 en esta circunstancia? No estoy seguro de qué es exactamente lo que sucede cuando se utiliza el "Establecer impresora = x" declaración en VB6 - está intentando que la interfaz con el controlador de impresora real en ese punto? ¿Es posible que el conductor no se reconoce como una impresora válida por el objeto VB6 de la impresora, por alguna razón, lo que resulta en el error "no válido argumento"?
Solución
La "llamada de procedimiento no válido o argumento" es un error de tiempo de ejecución de VB 5.
Sospecho que el error 5 que se está viendo es el código de error de Win32, que significa "Acceso denegado".
Al parecer, los errores de tiempo de ejecución de VB se diferencian de los errores de Win32 - Sospecho que tiene que ver con las raíces de VB precediendo incluso a MS-DOS: http://blogs.msdn.com/ericlippert/archive/2004/09/09/227461.aspx . No estoy seguro de cómo se supone que para determinar cuál es la interpretación de usar cuando
Otros consejos
Está utilizando un código como éste para configurarlo correcto? No sólo tratando de establecer por una cadena?
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
Con el fin de dejar de cambiar la impresora predeterminada de ejecutar este código antes de configurar la impresora. Entonces no tendrá que configurar la impresora predeterminada espalda. Esto también hace que su selección de impresora único a su programa que es lo que la mayoría de la gente quiere.
' deassociate printer object from default system printer
Printer.TrackDefault = False
He resuelto este problema en MS Access 2007 VBA incluyendo el nombre del servidor junto con el nombre de la impresora.
Application.Printer = Application.Printers("\\servername\printername")
en lugar de
Application.Printer = Application.Printers("printername")
Espero que esto ayude a alguien más.
Me estaba este error y después de un par de horas de frustración encontré mi respuesta. Era un tema delicado caso. Yo tenía un capital "S" cuando debería haber tenido una minúscula "s".
Así que cuando el código era la siguiente:
XeroxReport = "\\Share\Red Xerox 430"
Set Application.Printer = Application.Printers(XeroxReport)
Me sale error 5
Pero cuando lo cambié a:
XeroxReport = "\\share\Red Xerox 430"
Set Application.Printer = Application.Printers(XeroxReport)
Presto funcionó
Es posible que desee echar un vistazo a la página siguiente:
http://support.microsoft.com/kb/322710
Cuando la impresión en VB6 siempre uso este cuadro de diálogo en lugar del cuadro de diálogo común que viene con Visual Basic 6. Es mucho más fiable.