“Chiamata di procedura non valido o argomento” quando si imposta oggetto Printer
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"?
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.