“Chiamata di procedura non valido o argomento” quando si imposta oggetto Printer

StackOverflow https://stackoverflow.com/questions/737702

  •  09-09-2019
  •  | 
  •  

Domanda

Ho un'applicazione VB6 che sta dando un errore 5, "Chiamata di routine non valido o argomento" quando il programma tenta di impostare l'oggetto stampante per una stampante specifica della collezione Printers. La stampante in questione è una sorta di fotocopiatrice / stampante che funziona attraverso un server di stampa. L'errore non si verifica quando si imposta l'oggetto Printer ad altre stampanti definite nella collezione. Tutte le idee che potrebbero causare l'errore 5 in questa circostanza? Non sono sicuro di che cosa succede esattamente quando si utilizza il "Set Printer = x" dichiarazione in VB6 - è vero tentando di interfacciarsi con il driver di stampa effettiva a quel punto? E 'possibile che il driver non è riconosciuto come una stampante valida dall'oggetto VB6 stampante per qualche motivo, con conseguente l'errore "non valido argomento"?

È stato utile?

Soluzione

La "chiamata di procedura o argomento non valido" è per un errore di runtime VB 5.

Ho il sospetto che l'errore 5 che stai vedendo è il codice di errore Win32, che significa "Accesso negato".

A quanto pare gli errori di runtime VB differiscono da Win32 errori - ho il sospetto che ha a che fare con le radici della VB anteriori anche MS-DOS: http://blogs.msdn.com/ericlippert/archive/2004/09/09/227461.aspx . Non sono sicuro di come si suppone per determinare quale interpretazione da utilizzare quando

Altri suggerimenti

Si utilizza il codice come questo per impostare corretto? Non solo cercando di impostarla da una stringa?

   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 

Al fine di smettere di cambiare la stampante predefinita si esegue questo codice prima di impostare la stampante. Allora non sarà necessario impostare la stampante predefinita indietro. Questo rende anche la selezione della stampante unica per il vostro programma che è ciò che la maggior parte delle persone vuole.

' deassociate printer object from default system printer
Printer.TrackDefault = False

Ho risolto questo problema in MS Access 2007 VBA includendo il nome del server con il nome della stampante.

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

anziché

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

Spero che questo aiuti qualcun altro.

mi è stato sempre questo errore e dopo un paio di ore di frustrazione trovato la mia risposta. E 'stata una questione delicata caso. Ho avuto una "S" maiuscola, quando avrei avuto un minuscolo "s".

Così, quando il codice si presentava così:

XeroxReport = "\\Share\Red Xerox 430"
Set Application.Printer = Application.Printers(XeroxReport)

Vorrei avere errore di 5

Ma quando ho cambiato in:

XeroxReport = "\\share\Red Xerox 430"
Set Application.Printer = Application.Printers(XeroxReport)

presto ha funzionato

Si consiglia di dare un'occhiata alla seguente pagina:

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

Ogni volta che si stampa in VB6 Io uso sempre questa finestra di dialogo invece della finestra di dialogo comune che viene fornito con VB6. E 'molto più affidabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top