Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"

Begonnen von m.baumann, September 17, 2015, 11:57:41

⏪ vorheriges - nächstes ⏩

m.baumann

Hallo liebe Access-Profis,

habe eine kleine Datenbank für Reparaturberichte erstellt. Das Formular enthält einen Knopf, der bei Mausklick den Bericht als XPS (oder PDF) Datei ausgeben soll. Hier der Programmcode:

Private Sub Befehl69_Click()
Dim Berichtname As String
Me.Refresh
DoCmd.OpenReport "rpt_Tachymeter", acViewPreview
Berichtname = " Prüfbericht " & Reports![rpt_Tachymeter]![Firmenname] & " " & Reports![rpt_Tachymeter]![Typ] & " SN " & Reports![rpt_Tachymeter]![SN] & " Prüf-Nr " & Reports![rpt_Tachymeter]![PrüfNr] & " " & Date & ".XPS"
DoCmd.OutputTo acOutputReport, "rpt_Tachymeter", acFormatXPS, CurrentProject.Path & Berichtname, False
DoCmd.Close acReport, "rpt_Tachymeter"
End Sub

Das klappt auch prima - manchmal aber eben auch nicht, der Fehler scheint absolut willkürlich immer wieder mal aufzutreten. Manchmal klappt es 10mal hintereinander und dann wieder 10mal nicht. Die Ausgabe in XPS (PDF und RTF habe ich auch schon versucht) bricht immer wieder mit der Meldung: "Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen".
Mit OpenReport kann ich den Bericht aber immer einwandfrei aufrufen - also scheint es nicht an der Abfrage zu liegen.

Ich bin mit meinem Latein am Ende. Wer weiß Rat? Ich bin um jede Form von Hilfe dankbar.

DF6GL

Hallo,



--Möglicherweise ist OutputTo noch nicht "fertig"..
    versuch, eine kleine Wartezeit (ein paar Sekunden) vor dem Schließen des Berichtes einzubauen.

--Hier fehlt ein Backslash:

CurrentProject.Path & "\" & Berichtname

--Weiterhin könnte der zusammengebaute Dateiname ungültige Zeichen beinhalten


m.baumann

Hallo,
habe die Datenbank gerade nochmal auf einem anderen Rechner getestet, auf dem nur die Access Runtime Engine installiert ist, da hat alles tadellos funktioniert, also am Dateinamen scheint's nicht zu liegen.
Danke für den Tipp mit dem Schrägstrich, das werde ich gleich nochmal auf meinem eigenen Rechner ausprobieren.

m.baumann

Also, habe das ganze gerade nochmal mit dem Schrägstrich getestet, einmal hat es geklappt, einmal nicht.
Daß der Close-Report-Befehl den Output abwürgt kann eigentlich auch nicht sein, ich habe den Close-Befehl schonmal entfernt und die gleichen Resultate bekommen. Aber trotzdem danke für den Hinweis mit dem Schrägstrich, denn jetzt schreibt er mir nicht mehr den Pfadnamen in den Dateinamen, das hat mich vorher schon irritiert!

MaggieMay

Hi,

du könntest mal feststellen, bei welchem Berichtsnamen es klappt und bei welchem nicht.

Außerdem halte ich den Zugriff auf Steuerelemente des Berichts von außen für fragwürdig. Wird der Bericht mit nur einem Datensatz gefüttert? Er wird ja beim Öffnen nicht gefiltert, wie lautet denn seine Datenquelle? Und warum öffnest du ihn überhaupt so oft hintereinander?

Warum gibt es keine Fehlerbehandlung im Code?
Freundliche Grüße
MaggieMay

trebuh

#5
Hallo,

Ich glaube, das ich mal ein ähnliches Problem hatte. (Bin mir jetzt nicht sicher, ob es die gleiche Fehlernummer wahr)

Kann es sein, das da irgendwelche Sonderzeichen wie / oder . im Berichtsnamen sind?
Wenn man im Explorer einem Ordner oder einer Datei einen Namen mit Sonderzeichen vergibt, weiß einem das Betriebsystem darauf hin, mit dem Hinweis einen anderen Namen zu wählen.

Um sicher zu gehen, das es nicht am Berichtsnamen liegen kann, würde ich mir den Berichtsnamen per MsgBox vor dem Code:
DoCmd.OutputTo acOutputReport, "rpt_Tachymeter", acFormatXPS, CurrentProject.Path & "\" & Berichtname, False
ausgeben lassen. Vielleicht ergeben sich da ja evtl. unerwünschte Konstellationen.

Also z.B.
Private Sub Befehl69_Click()
Dim Berichtname As String
Me.Refresh
DoCmd.OpenReport "rpt_Tachymeter", acViewPreview
Berichtname = " Prüfbericht " & Reports![rpt_Tachymeter]![Firmenname] & " " & Reports![rpt_Tachymeter]![Typ] & " SN " & Reports![rpt_Tachymeter]![SN] & " Prüf-Nr " & Reports![rpt_Tachymeter]![PrüfNr] & " " & Date & ".XPS"

MsgBox "Berichtsname = " & Berichtsname

DoCmd.OutputTo acOutputReport, "rpt_Tachymeter", acFormatXPS, CurrentProject.Path & "\" & Berichtname, False
DoCmd.Close acReport, "rpt_Tachymeter"
End Sub


Wenn ich mich recht erinnere, war es bei mir ein "/" welches ab und zu im Dateinamen Verwendung fand und die Aktion abbrechen ließ.

Und wenn ich sehe, das Du unter anderem das Datum im Namen mitverwendest... Wie sieht das dann im Dateinamen der PDF-Datei aus? Ich hatte damals die Punkte im Datum rausgenommen. Also z.B. Re_0815_vom_17092015.PDF

Gruß Hubert

m.baumann

Also wie gesagt, ich denke nicht, daß am Programmcode irgendwas nicht stimmt.
Auf einem Rechner mit Access Runtime Engine hat die Ausgabe mehrfach hintereinander ohne Probleme funktioniert, nur auf meinem Rechner mit vollwertigen Access gibt es immer wieder Probleme.
Hier mal ein Beispiel für einen Dateinamen:  Prüfbericht Vermessungsbüro ***** S8 SN 98110434 Prüf-Nr 15459 17.09.2015.XPS
(Den Namen habe ich durch Sternchen ersetzt).

Der Bericht umfasst immer nur einen Datensatz, über eine Abfrage wird nur der aktuell im Formular angewählte Datensatz ausgegeben.
Was Fehlerbehandlung angeht, muss ich gestehen, daß meine VBA-Kenntnisse ziemlich begrenzt sind. Alles was ich über VBA weiß habe ich mir  angelesen und nach und nach die einzelnen Funktionen zusammengebastelt um nicht zu sagen zusammengepfuscht...

Vielleicht ist Access ja auch gar nicht die richtige Wahl für diese Aufgabe gewesen. Im Prinzip soll der fertige Bericht ja einfach nur als PDF oder XPS anschließend im CRM gespeichert werden. Als richtige Datenbank soll das ganze also gar nicht dienen, sondern mehr als Formular das einfach nur Berichte ausspuckt, die dann anderweitig weiterverarbeitet werden.

Ein PDF-Formular wäre vielleicht von Anfang an die bessere Wahl gewesen, aber ich habe überhaupt keine Ahnung, wie ich es schaffe, daß Acrobat auf Daten z. B. einer Excel-Tabelle zugreift. Ziel soll ja sein, daß man über Drag und Drop z.B. die Firma auswählt und dann die Adresse ergänzt, bzw. nach Eingabe der Seriennummer gleich das entsprechende Gerät ergänzt wird. Toll wäre auch, wie in meinem Beispiel, daß die relevanten Daten dann auch gleich im Dateinamen stehen.
Aber mit Java-Script müsste man in einem PDF-Formular ähnliches machen können, oder?

trebuh

Also ich persönlich würde ä,ü,und ö umwandeln in ae,ue und oe. Ebenso würde ich die Punkte im Datum entfernen oder umwandeln in z.B. 17_09_2015.

Es heißt oftmals, das solche Sachen schwierigkeiten machen können (aber nicht müssen).

MaggieMay

ZitatWas Fehlerbehandlung angeht, muss ich gestehen, daß meine VBA-Kenntnisse ziemlich begrenzt sind.
Dann versuche es doch mal hiermit:
Private Sub Befehl69_Click()
    Dim strBerichtsname As String, rep As Report
On Error GoTo Fehler
    Me.Refresh     ' wozu das? soll der aktuelle Datensatz gespeichert werden?
    DoCmd.OpenReport "rpt_Tachymeter", acViewPreview
    Set rep = Reports!rpt_Tachymeter
    strBerichtsname = "\Prüfbericht_" & rep![Firmenname] & "_" & rep![Typ] & "_SN_" & rep![SN] & "_Prüf-Nr_" & rep![PrüfNr] & "_" & Format(Date, "yyyymmdd") & ".XPS"
    DoCmd.OutputTo acOutputReport, "rpt_Tachymeter", acFormatXPS, CurrentProject.Path & strBerichtsname, False
    DoEvents
Ende:
    On Error Resume Next
    DoCmd.Close acReport, "rpt_Tachymeter"
    Exit Sub
Fehler:
    MsgBox Err.Description, , Err.Number
    Resume Ende
End Sub
Freundliche Grüße
MaggieMay

m.baumann

Danke für den Code! Die ersten paar Male hat sich gar nichts getan, als ich den Button geklickt habe, dann hat es ein paar Mal hintereinander einwandfrei funktioniert. Es ist auf jeden Fall schonmal ein Fortschritt, daß das Programm jetzt zumindest nicht mehr abstürzt.
Das Me.Refresh hatte ich übrigens eingefügt, da es mir mal passiert ist, daß aus dem Formular nicht alle Daten in den Bericht übernommen wurden.

DF6GL

Hallo,

ich tippe immer noch darauf, dass in den Daten (in bestimmten Datensätzen), mit denen der Dateiname zusammengesetzt wird, irgendwelche, für einen Windows-Dateinamen ungültige Zeichen auftauchen....

Wie lang kann denn ein solcher Dateinamen überhaupt werden? D. H. aus wie vielen Zeichen besteht der Dateiname maximal?

MaggieMay

Hi,
ZitatDas Me.Refresh hatte ich übrigens eingefügt, da es mir mal passiert ist, daß aus dem Formular nicht alle Daten in den Bericht übernommen wurden.
dann solltest du besser den aktuellen Datensatz - sofern nötig - speichern vor dem Berichtsaufruf.
If Me.Dirty Then Me.Dirty = False
Freundliche Grüße
MaggieMay

m.baumann

So, ich habe das ganze nun noch mehrere Male getestet und keinen Programmabsturz mehr gehabt. Einen herzlichen Dank an alle für die schnelle und nette Hilfe! Jetzt muß ich nur noch unseren Techniker überzeugen, daß er das Formular dann auch wirklich benutzt, das wird wahrscheinlich die größte Hürde.
Eine letzte Frage hätte ich aber noch: Was bewirkt denn nun Me.Refresh genau und was ist der Unterschied zu Me.Dirty?

MaggieMay

Sorry, aber die Refresh-Methode ist in der Access-Hilfe ausführlichst beschrieben, besser könnten wir das hier auch nicht. ;-)

Dirty dagegen ist eine Formular-Eigenschaft die besagt, ob im aktuellen Datensatz etwas geändert wurde. Stellt man sie auf False, wird automatisch gespeichert, sofern nötig. Demnach ist die vorherige Abfrage auf True nicht zwingend erforderlich.

Freundliche Grüße
MaggieMay

m.baumann

Danke für den Hinweis, ich werde mal die Access-Hilfe bemühen.

Eine allerletzte Frage hätte ich aber doch noch, da ich ja in diesem speziellen Fall Access nicht als Datenbank im eigentlichen Sinne, sondern mehr als Formular zur Erzeugung eines Berichtes nutze:

Könnte man ein vergleichbares Ergebnis mit weniger Aufwand auch z. B. mit Word oder Acrobat durch Anbindung an Excel-Listen erzielen?
Ziel soll sein, daß man möglichst wenig tippen muß, d.h. über Dropdown Felder z. B. Kunden-Adressen abruft bzw. durch Eingabe einer Seriennummer Daten zu einem bestimmten Gerät erhält. Einfache Berechnungen für Meßwerte sollen auch durchgeführt werden. Mit Access habe ich mich jetzt schon mehrere Wochen abgemüht ein respektables Ergebnis zu erzielen, aber besonders die Layout-Möglichkeiten bei der Berichterstellung sind doch äußerst begrenzt und richtig schön schauen die Berichte nach wie vor nicht aus.