Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: m.baumann am September 17, 2015, 11:57:41

Titel: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: m.baumann am September 17, 2015, 11:57:41
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.
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: DF6GL am September 17, 2015, 12:51:57
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

Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: m.baumann am September 17, 2015, 13:43:06
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.
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: m.baumann am September 17, 2015, 14:39:40
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!
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: MaggieMay am September 17, 2015, 16:12:16
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?
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: trebuh am September 17, 2015, 19:31:05
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
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: m.baumann am September 18, 2015, 15:06:03
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?
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: trebuh am September 18, 2015, 16:20:44
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).
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: MaggieMay am September 18, 2015, 16:31:15
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
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: m.baumann am September 21, 2015, 11:45:48
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.
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: DF6GL am September 21, 2015, 12:52:22
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?
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: MaggieMay am September 21, 2015, 13:57:25
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
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: m.baumann am September 22, 2015, 11:54:01
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?
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: MaggieMay am September 22, 2015, 12:20:20
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.

Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: m.baumann am September 23, 2015, 16:46:50
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.
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: MaggieMay am September 23, 2015, 17:09:25
Hi,

möglicherweise stellst du die Frage im falschen Forum, zumindest ich persönlich halte Access für bestens geeignet für diesen Job. Was die Berichte betrifft, so kommt es natürlich drauf an was man erwartet, aber vielleicht hast du da noch nicht alle Möglichkeiten ausgeschöpft. Gib doch mal ein konkretes Beispiel wie du es gerne hättest, aber nicht hinbekommen hast.
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: m.baumann am September 24, 2015, 14:55:40
Vielleicht bin ich durch InDesign etwas verwöhnt, aber Hilfslinien zur genauen Positionierung von Textelementen habe ich doch sehr vermisst. Auch ein Lupe-Modus wäre hilfreich, wenn man ein Element wirklich millimetergenau platzieren will, aber den scheint es auch nicht zu geben oder er ist sehr gut versteckt!
Außerdem wollte ich im Kopf z. B. einen Farbverlauf, aber auch diese Option habe ich nicht gefunden. Überhaupt war die ganze Aufteilung in Fuß, Kopf, Detailbereich usw. für meine Zwecke eher hinderlich. Ich wollte die Elemente einfach möglichst frei auf der Seite verteilen.
Wahrscheinlich wäre es klüger gewesen, erst in Word eine Vorlage zu erstellen und dann von Access mit den Daten befüllen zu lassen, aber das hätte meine bescheidenen VBA-Kenntnisse dann wohl doch um Längen überstiegen.
Damit Du Dir mal eine Vorstellung machen kannst, wie der Bericht ungefähr aussehen soll, hänge ich mal ein Bildschirmfoto an. So spuckt ihn Access derzeit aus, aber richtig schön finde ich es noch nicht.
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: el_gomero am September 24, 2015, 15:06:25
Hallo,

Steuerelemente im Bericht kannst du millimetergenau über die Eigenschaften einstellen. Beachte dabei, dass die Angaben in twips erfolgen, wobei 1cm=567 twips enstpricht.

Für professionelle Berichte wird gerne zu Crystal Reports gegriffen, allerdings habe ich keine Erfahrung damit, aber vllt ist es etwas für dich. Über ne Suchmaschine findest du sicher viele Infos.
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: MaggieMay am September 24, 2015, 15:07:29
Wenn man etwas millimetergenau positionieren will, kann man die Werte auch über die Steuerelementeigenschaften eingeben. Des weiteren gibt es Funktionen, um die Steuerelemente aneinander auszurichten und die Größen anzupassen. Außerdem kann man ein Raster einblenden lassen und auch den Abstand der Linien festlegen. Auch mit dem Einsatz von Layouts kann man einiges erreichen. Ich denke, da musst du dich wohl noch ein wenig intensiver mit befassen, mit ein bißchen Übung ist das alles kein Problem.

Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: m.baumann am September 24, 2015, 15:23:59
Auf die Steuerelementeigenschaft habe ich dann auch notgedrungen zurückgegriffen. Schöner fände ich es aber wie gesagt, wenn man über die Lupenfunktion heranzoomen und alles paßgenau verschieben könnte. Gibt es wirklich keine Lupe oder ist die nur versteckt?
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: el_gomero am September 24, 2015, 15:27:38
Zitat
Gibt es wirklich keine Lupe oder ist die nur versteckt?
die ist Teil des OS (zumindest unter Win7) und kann mit "Bildschirmlupe" aufgerufen werden.
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: DF6GL am September 24, 2015, 15:28:26
Hallo,

in Access gibt es keine "Lupe", wohl aber bei Windows selber....
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: MaggieMay am September 24, 2015, 15:48:30
Anstelle von "passgenauem Verschieben" könntest du die bereits erwähnten Ausrichte-Funktionen einsetzen, das ist wesentlich komfortabler.
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: m.baumann am November 17, 2015, 15:02:05
Noch einmal vielen Dank an alle, die versucht haben zu helfen, ich habe mittlerweile herausgefunden wo das Problem lag.
Es lag tatsächlich an einem Sonderzeichen, das in einem Dateinamen nichts verloren hat. Nachdem ich meinen VBA-Code geändert hatte, habe ich ihn gleich 10 - 20 Mal hintereinander getestet und er hat immer einwandfrei funktioniert. Das lag daran, daß ich immer Instrumente aus dem oberen Bereich des Listenmenüs gewählt habe und keine Tachymeter (die weiter unten waren). Das sind aber genau die Instrumente die als Angabe der Genauigkeit immer Anführungsstriche für die Sekundenangabe mit im Namen führen, z. B. S6 3". Und genau das kann Access nicht in den Dateinamen schreiben, also werde ich die Typenbezeichnung aus meinem Code rauslassen, denn wirklich wichtig ist sie nicht, solange die Seriennummer dabei ist.
Titel: Re: Laufzeitfehler 2501: "Die Aktion Output to wurde abgebrochen"
Beitrag von: MaggieMay am November 17, 2015, 16:29:33
Hi,
ZitatUnd genau das kann Access nicht in den Dateinamen schreiben
Access könnte das schon, aber das Dateisystem lässt keine Gänsefüßchen in Dateinamen oder Pfaden zu. Da könntest du dir evtl. ersatzweise mit zwei aufeinanderfolgenden Hochkommata behelfen.