Ich habe eine VB6-Anwendung, die den Fehler 5 "Ungültiger Prozeduraufruf oder ungültiges Argument" gibt, wenn das Programm versucht, das Printer-Objekt auf einen bestimmten Drucker aus der Printers-Auflistung festzulegen . Bei dem fraglichen Drucker handelt es sich um eine Art Kopierer/Drucker, der über einen Druckserver läuft. Der Fehler tritt nicht auf, wenn das Printer-Objekt auf andere in der Sammlung definierte Drucker festgelegt wird. Irgendwelche Ideen, was den Fehler 5 in diesem Fall verursachen könnte? Ich bin mir nicht sicher, was genau passiert, wenn ich die Anweisung "Set Printer = x" in VB6 verwende - versuche ich zu diesem Zeitpunkt mit dem eigentlichen Druckertreiber zu interagieren? Ist es möglich, dass der Treiber vom VB6-Druckerobjekt aus irgendeinem Grund nicht als gültiger Drucker erkannt wird, was zu dem Fehler "ungültiges Argument" führt?"Ungültiger Prozeduraufruf oder Argument" beim Festlegen des Druckerobjekts
Antwort
Der „ungültige Prozedur-Aufruf oder Argument“ ist für einen VB-Laufzeitfehler 5.
Ich vermute, dass der Fehler 5 Sie sehen, der Fehlercode Win32 ist, das bedeutet „Zugriff verweigert“.
Scheinbar VB Laufzeitfehler unterscheiden sich von Win32-Fehler - ich vermute, dass es mit den Wurzeln von VB vor MS-DOS vorgeht: http://blogs.msdn.com/ericlippert/archive/2004/09/09/227461.aspx. Ich bin nicht sicher, wie Sie bestimmen sollten, welche Interpretation zu verwenden, wenn
Ahh ... dachte nie darüber nach. Der betreffende Drucker befindet sich auf einem Druckserver, aber der Benutzer kann mit anderen Anwendungen darauf drucken. Was könnte dazu führen, dass VB6 "Zugriff verweigert" erhält, wenn "Drucker einstellen = x" gewählt wird? Muss das Druckerobjekt einige Konfigurationsrechte für den Zieldrucker oder etwas anderes haben? –
Wenn der Benutzer außerhalb des Programms auf den Drucker zugreifen kann, bin ich weniger geneigt zu denken, dass es sich um ein Problem mit Zugriffsverweigerung handeln könnte. –
Der Fehler 5 ist fast sicher der VB-Laufzeitfehler 5 "Ungültiger Prozeduraufruf oder Argument". Sie erhalten keinen Win32-Fehler beim Ausführen einer 'Set'-Anweisung. Sie erhalten nur Win32-Fehler von VB6, wenn Sie API-Aufrufe mit der 'Declare'-Anweisung machen, und dann müssen Sie sie erkennen, indem Sie auf die 'Err.LastDllError'-Eigenschaft schauen. – MarkJ
Sie verwenden Code wie folgt, um es richtig einzustellen? Nicht nur versuchen, es an einer Zeichenfolge festzulegen?
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
Um den Standarddrucker nicht mehr zu ändern, führen Sie diesen Code vor dem Einrichten des Druckers aus. Dann müssen Sie den Standarddrucker nicht zurücksetzen. Dies macht auch Ihre Druckerauswahl einzigartig für Ihr Programm, was die meisten Leute wollen.
' deassociate printer object from default system printer
Printer.TrackDefault = False
Ja, die App setzt das Printer-Objekt auf ein Printer-Objekt Druckersammlung. Es setzt den Drucker auf einen Belegdrucker, druckt den Beleg und setzt den Drucker wieder auf den Win-Standarddrucker. Wenn das der Kopierer ist, tritt der Fehler auf. Wenn der Standarddrucker nicht der Kopierer ist, tritt kein Fehler auf. –
sehe meine überarbeitete Antwort - mit Printer.TrackDefault = False, um zu vermeiden, den Standarddrucker zu ändern und damit zu vermeiden, dass er zurückgesetzt werden muss. –
Sie können einen Blick auf die folgende Seite nehmen wollen:
http://support.microsoft.com/kb/322710
Jedes Mal, wenn in VB6 Druck ich immer verwenden dieses Dialogfeld anstelle des gemeinsamen Dialogfeld, das mit VB6 kommt. Es ist viel zuverlässiger.
Ich habe dieses Problem in MS Access 2007 VBA gelöst, indem Sie den Servernamen zusammen mit dem Druckernamen einschließen.
Application.Printer = Application.Printers("\\servername\printername")
statt
Application.Printer = Application.Printers("printername")
Hoffnung hilft dies jemand anderes.
Ich bekam diesen Fehler und nach ein paar Stunden der Frustration fand meine Antwort. Es handelte sich um ein Problem, bei dem die Groß-/Ich hatte ein Capital "S", als ich einen Kleinbuchstaben "s" hätte haben sollen. So
wenn sah der Code wie folgt:
XeroxReport = "\\Share\Red Xerox 430"
Set Application.Printer = Application.Printers(XeroxReport)
Ich würde erhalten Fehler 5
Aber wenn ich es geändert:
XeroxReport = "\\share\Red Xerox 430"
Set Application.Printer = Application.Printers(XeroxReport)
presto arbeitete es
- 1. Ungültiger Prozeduraufruf oder ungültiges Argument in VBScript
- 2. Ungültiger Prozeduraufruf oder Argument mit DateAdd VBA MSACCESS
- 3. Microsoft VBScript-Laufzeitfehler ‚800a0005‘ Ungültiger Prozeduraufruf oder Argument: ‚Mitte‘
- 4. ungültiger Prozedur-Aufruf oder Argument
- 5. VBA - Do While-Schleife gibt Dir zurück <Ungültiger Prozeduraufruf oder Argument>
- 6. Excel 2010 VBA "Ungültiger Prozeduraufruf oder Argument" Fehler in Regex-Funktion
- 7. Gespeicherter Prozeduraufruf mit einem ISNULL in der Zuordnung. Ungültiger Satzbau?
- 8. OpenCL struct Argument ungültiger Adressraum
- 9. 'Ungültiger Wert' beim Festlegen des Standardwerts in HTML5 datetime-local-Eingabe
- 10. CUICatalog: Ungültiger Objektname:, oder ungültiger Skalierungsfaktor: 2.000000
- 11. konnte die Listeneigenschaft nicht festlegen. Ungültiger Eigenschaftswertfehler
- 12. Klammerplatzierung beim Festlegen des Wertes des Objektschlüssels JavaScript
- 13. Exception-Wert: ungültiger Typ für Argument-Text
- 14. Fehler beim Verwenden von UpdateCursor beim Festlegen des Werts
- 15. nHibernate gespeicherte Prozeduraufruf
- 16. Spring Data Prozeduraufruf
- 17. ungültiger 'Typ' (Zeichen) des Arguments
- 18. Ungültiger grant_type-Parameter oder Parameter, der beim POST zum Anfordern des Zugriffstokens fehlt
- 19. Probleme beim Festlegen des Standardjahresanfangs im jQuery-Datumswidget
- 20. Wie Standard-Argument-Wert in F # festlegen?
- 21. Ausnahme beim Festlegen des Feldes Nib Name im Interface Builder
- 22. Ausgewählte Option des Auswahlfelds festlegen
- 23. Tabelle oder Ansicht existiert nicht beim Öffnen des Cursors?
- 24. Problem beim Festlegen des Attributs Wert oder Name auf einem dynamisch erstellten Optionsfeld
- 25. Fehler beim Auswählen oder Festlegen des Fokus auf ein benutzerdefiniertes Steuerelement
- 26. Symfony2-Formatfehler beim Festlegen des Datums mit DateTime
- 27. Syntax beim Festlegen des Schemas für Pypspark.sql mit StructType
- 28. Argument Exception beim Erstellen JObject
- 29. Festlegen des Namensattributs des Symfony 2-Formularfelds
- 30. Ungültiger Zuschuss beim Zugriff auf Google API
Sind Sie sicher, dass der Fehler in der Zeile "Drucker einstellen" liegt?Ich habe Fehler bei der Einstellung verschiedener Eigenschaften festgestellt, die nicht auf einen bestimmten Drucker zutreffen. Aber nicht am Set. –
Ja, es ist richtig in der Zeile "Drucker einstellen". Die Quelle ist zeilennummeriert, und der Error-Handler zeigt den Erl-Wert als Teil der Fehlermeldung an. –