„Ungültiger Prozedur-Aufruf oder Argument“ bei der Einstellung Printer-Objekts

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

  •  09-09-2019
  •  | 
  •  

Frage

Ich habe eine VB6-Anwendung, die einen Fehler 5 „ungültigen Prozedur-Aufruf oder Argument“ ist zu geben, wenn das Programm versucht, das Printer-Objekt an einen bestimmten Drucker aus dem Drucker Sammlung zu setzen. Der Drucker in Frage ist eine Art von Kopierer / Drucker über einen Druckserver ausgeführt wird. Der Fehler tritt nicht auf, wenn das Printer-Objekt zu anderen Druckern in der Sammlung definierten Einstellung. Irgendwelche Ideen, was könnte den Fehler 5 in diesem Umstand verursachen? Ich bin mir nicht sicher, was genau passiert, wenn die „Set Printer = x“ Anweisung in VB6 - es versucht, an diesem Punkt mit dem eigentlichen Druckertreiber-Schnittstelle? Ist es möglich, dass der Fahrer nicht als gültige Drucker vom VB6 Printer-Objekt aus irgendeinem Grunde erkannt wird, was in den „ungültigen Argumente“ Fehlern?

War es hilfreich?

Lösung

Der "ungültige Prozedur-Aufruf oder Argument" ist für einen VB-Laufzeitfehler 5.

Ich vermute, dass der Fehler 5 Sie sehen Sie den Code ein Win32-Fehler ist, das bedeutet „Zugriff verweigert“.

Offenbar VB Laufzeitfehler unterscheiden sich von Win32 Fehler - ich vermute, dass es mit den Wurzeln von VB zu tun hat datierend auch MS-DOS: http://blogs.msdn.com/ericlippert/archive/2004/09/09/227461.aspx . Ich bin mir nicht sicher, wie man eigentlich, um zu bestimmen, welche Interpretation zu verwenden, wenn

Andere Tipps

Sie verwenden Code wie folgt um es einrichten korrigieren? Nicht nur versuchen, es mit einer Schnur zu setzen?

   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 Sie diesen Code ausführen Ändern Sie den Standarddrucker zu stoppen, bevor Sie den Drucker ein. Dann werden Sie nicht wieder den Standarddrucker einstellen müssen. Dies macht auch Ihre Druckerauswahl einzigartig für Ihr Programm das ist, was die meisten Leute wollen.

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

Ich löste dieses Problem in MS Access 2007 VBA durch die Servernamen einschließlich zusammen mit dem Druckernamen.

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

statt

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

Hope, das hilft jemand anderes.

Ich habe immer diese Fehlermeldung und nach ein paar Stunden der Frustration fand meine Antwort. Es war ein Fall sensibles Thema. Ich hatte ein Capital „S“, wenn ich ein kleines „s“ gehabt haben soll.

Also, wenn der Code sah wie folgt aus:

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

Ich würde erhalten Fehler 5

Aber wenn ich ändere es an:

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

presto es funktionierte

Sie können einen Blick auf die folgende Seite nehmen wollen:

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

Jedes Mal, wenn in VB6 Druck habe ich immer dieses Dialogfeld verwenden anstelle des gemeinsamen Dialogfeld, das mit VB6 kommt. Es ist viel zuverlässiger.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top