Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: claudia2324 am Juli 25, 2013, 11:12:32

Titel: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 25, 2013, 11:12:32
Hallo liebe Access-Experten,

ich habe ein Problem bei der Generierung von PDF-Drucken eines Berichts, der als Blanko-Prüfungsbogen (als Ersatzblatt) keine Daten um Kopf enthalten soll. Ebenfalls kann anhand des selben Berichts auch eine Version mit den Angaben zum Prüfling im Kopf generiert werden, was sehr gut funktioniert (auch beim problematischen Sonderfall). Ich finde den Fehler leider nicht... Mit "Where 1=2" sollte die Auswahl zurückgesetzt werden, was aber in dem Fall des Bogens "Pruefung_5_Schreibblatt" (Sonderfall) nicht funktioniert. Bei allen anderen Berichten klappt die Generierung der Blankobögen.


Ich habe im folgenden zuerst den Code zur Generierung der PDF-Prüfungsbögen und dann den Code zu der  Blanko-Version des Prüfbogens
angefügt:

Generierung des PDF-Drucks der Prüfungsbögen als Blankoversion:
Private Sub Blanko_Klausur_pdf_Click() ' Genrierung eines Blanko-Pruefungsbogens als PDF-Datei
On Error GoTo Fehler

Dim stDocName As String, strSQL As String
   If IsNull(Kblanko) Then GoTo Fehler Else GoTo Pruefung
   
Pruefung:
   If Me!Kblanko = "5_Aufgabenblatt" Then GoTo AufgabenblattBlanko Else GoTo BlankoDruck_pdf
   
AufgabenblattBlanko:
   strSQL = "SELECT INT_Pruefungsboegen.Etagennr, INT_Pruefungsboegen.Durchgangtxt, INT_Pruefungsboegen.Stud_ID, INT_Pruefungsboegen.StartPruefung, INT_Pruefungsboegen.Nachname, INT_Pruefungsboegen.Vorname FROM INT_Pruefungsboegen Where 1=2"
   DoCmd.OutputTo acOutputReport, "Pruefung_5_Schreibblatt", acFormatPDF, CurrentProject.Path & "\Pruefung-" & Me!Kblanko & "_" & "Blanko" & Format(Date, "\_yyyy-mm-dd") & ".pdf"
   Exit Sub
   
BlankoDruck_pdf:
   strSQL = "SELECT INT_Pruefungsboegen.Etagennr, INT_Pruefungsboegen.Durchgangtxt, INT_Pruefungsboegen.Stud_ID, INT_Pruefungsboegen.StartPruefung, INT_Pruefungsboegen.Nachname, INT_Pruefungsboegen.Vorname FROM INT_Pruefungsboegen Where 1=2"
   stDocName = "abf_Pruefung_" & Me!Kblanko
   CurrentDb.QueryDefs(stDocName).SQL = strSQL
   DoCmd.OutputTo acOutputReport, "Pruefung_" & Me!Kblanko, acFormatPDF, CurrentProject.Path & "\Pruefung-" & Me!Kblanko & "_" & "Blanko" & Format(Date, "\_yyyy-mm-dd") & ".pdf"
   Exit Sub
   
Fehler:
   MsgBox "Bitte wählen Sie eine Prüfungsnummer aus der vorgegebenen Werteliste aus! Ggf. geöffnete PDF-Dateien schließen."
   Exit Sub

End Sub


Generierung Blanko-Version des Prüfbogens


Private Sub Seitenkopfbereich_Format(Cancel As Integer, FormatCount As Integer)

If IsNull(Me.Stud_ID) Then txtPrueferID.Visible = False
If IsNull(Me.Stud_ID) Then txtPrueferID2.Visible = False
If IsNull(Me.Stud_ID) Then txtLfdNr.Visible = False
If IsNull(Me.Stud_ID) Then Me.bezLfdNr.Visible = False
If IsNull(Me.Stud_ID) Then Me.txtBewerbername.Visible = False
If IsNull(Me.Stud_ID) Then Me.bezStartStation.Visible = False
If IsNull(Me.Stud_ID) Then Me.LiNachname.Visible = True Else Me.LiNachname.Visible = False
If IsNull(Me.Stud_ID) Then Me.LiVorname.Visible = True Else Me.LiVorname.Visible = False

End Sub



Private Sub Seitenfußbereich_Format(Cancel As Integer, FormatCount As Integer)

If IsNull(Me.Stud_ID) Then Me.txtVersion.Caption = "pruefbogen-5-schreibblatt_blanko"

End Sub
[code=vb]Private Sub Seitenkopfbereich_Format(Cancel As Integer, FormatCount As Integer)

If IsNull(Me.Stud_ID) Then txtPrueferID.Visible = False
If IsNull(Me.Stud_ID) Then txtPrueferID2.Visible = False
If IsNull(Me.Stud_ID) Then txtLfdNr.Visible = False
If IsNull(Me.Stud_ID) Then Me.bezLfdNr.Visible = False
If IsNull(Me.Stud_ID) Then Me.txtBewerbername.Visible = False
If IsNull(Me.Stud_ID) Then Me.bezStartStation.Visible = False
If IsNull(Me.Stud_ID) Then Me.LiNachname.Visible = True Else Me.LiNachname.Visible = False
If IsNull(Me.Stud_ID) Then Me.LiVorname.Visible = True Else Me.LiVorname.Visible = False

End Sub



Private Sub Seitenfußbereich_Format(Cancel As Integer, FormatCount As Integer)

If IsNull(Me.Stud_ID) Then Me.txtVersion.Caption = "pruefbogen-5-schreibblatt_blanko"

End Sub


Wo steckt der Fehler?

Ich wäre sehr dankbar über hilfreiche Tipps.

Viele Grüße

Claudia[/code]
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: DF6GL am Juli 25, 2013, 11:25:31
Hallo,

es fehlt die Zuweisung des SQL-Strings an die SQL-Eigenschaft der Berichtsabfrage....

Zudem dürfte der Code nach der ersten "Fehler"-Marke durch fehlerhaftes Kopieren "verhunzt" sein...
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 25, 2013, 11:38:28
Hallo DF6GL,

vielen Dank für den Tipp :-)

Ich hab nun mal das ergänzt:
   
AufgabenblattBlanko:
strSQL = "SELECT INT_Pruefungsboegen.Etagennr, INT_Pruefungsboegen.Durchgangtxt, INT_Pruefungsboegen.Stud_ID,   INT_Pruefungsboegen.StartPruefung, INT_Pruefungsboegen.Nachname, INT_Pruefungsboegen.Vorname FROM INT_Pruefungsboegen Where 1=2"
stDocName = "Pruefung_5_Schreibblatt"
CurrentDb.QueryDefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Pruefung_5_Schreibblatt", acFormatPDF, CurrentProject.Path & "\Pruefung-" & Me!Kblanko & "_" & "Blanko" & Format(Date, "\_yyyy-mm-dd") & ".pdf"

Exit Sub


Leider erhalte ich die Fehlermeldung zur Sprungmarke "Fehler:".

Was habe ich an der Stelle falsch gemacht? Wie müsste der korrekte Code aussehen.

Ich hoffe, ich kann nochmals Tipps bekommen.

VG

Claudia
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: DF6GL am Juli 25, 2013, 11:51:25
Hallo,

Wie lautet denn die Fehlermeldung?


Das sollte noch geändert werden:

If IsNull(Me!Kblanko) Then GoTo Fehler Else GoTo Pruefung



Und solche Goto-Sprünge sind auch nicht das Gelbe vom Ei...



Ansonsten benenne "Fehler" mal um in z. B. "MyErr".   Schreibe zudem "Option Explicit" in JEDEN Modulkopf (falls noch nicht geschehen) und kompiliere die DB im VBA_Editor unter "Debuggen/Kompilieren"
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 25, 2013, 12:38:26
Hallo,
danke, habe die Tipps umgesetzt.

Das ändert aber leider nichts daran, dass es noch nicht funktioniert.  :(

Brauche wohl noch etwas mehr Unterstützung. Hoffe das wäre mögl. ohne dass sich an meiner momentanen "Unfähigkeit" die Dinge richtig zu erkennen angestoßen wird...  :)

Ich weiß das mit den GoTo Srüngen. Bei der damaligen Hilfe hier im Forum wurde mir dies jedoch als Lösung empfohlen. Ich brauche jetzt erstmal einen funktionierenden Code bevor es im Weiteren um die Verbesserung geht.

Ich hoffe jemand kann mir sagen, was im Code nicht stimmt und wie es richtig wäre.

VG

Claudia
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: DF6GL am Juli 25, 2013, 12:39:35
Hallo,

dann beantworte doch auch meine Frage...
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 25, 2013, 13:04:39
Sorry, aber ich kann deine Frage nicht erkennen.

Den Kopierten Code hatte ich bereits korrigiert.

Bitte nochmal stellen.
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: 69bruno am Juli 25, 2013, 13:05:19
Die Frage war, "wie lautet die Fehlermeldung"
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 25, 2013, 13:08:34
Es kommt keine Fehlermeldung von Access selbst.

Der Code spring an die Stelle jetzt "MyErr" -> MsgBox "Bitte wählen Sie eine Prüfungsnummer aus der vorgegebenen Werteliste aus! Ggf. geöffnete PDF-Dateien schließen."

Ansonsten passiert nicht weiter  ???
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: 69bruno am Juli 25, 2013, 13:09:53
Schon mal den Code zeilenweise ausgeführt und ermittelt, aus welcher Zeile er in die Fehlerroutine läuft ?
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: DF6GL am Juli 25, 2013, 13:13:51
Hallo,



wirf auch mal die Zeile

On Error GoTo Fehler

heraus...
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 25, 2013, 13:28:13
Danke für den Tipp  :)

Nachdem ich nun On Error GoTo Fehler entfernt habe, läuft der Code durch und die Blanko-Bögen werden personalisiert als PDF abgelegt. Wie kann das denn sein?

Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 25, 2013, 14:00:22
Tja, und so wird nun der Druckdialog angezeigt aber nichts passiert...

AufgabenblattBlanko:
strSQL = "SELECT INT_Pruefungsboegen.Etagennr, INT_Pruefungsboegen.Durchgangtxt, INT_Pruefungsboegen.Stud_ID, INT_Pruefungsboegen.StartPruefung, INT_Pruefungsboegen.Nachname, INT_Pruefungsboegen.Vorname FROM INT_Pruefungsboegen Where 1=2"
stDocName = "abf_Pruefung_" & Me!Kblanko
CurrentDb.QueryDefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Pruefung_" & Me!Kblanko, acFormatPDF, CurrentProject.Path & "\Pruefung-" & Me!Kblanko & "_" & "Blanko" & Format(Date, "\_yyyy-mm-dd") & ".pdf"
Exit Sub


???
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: 69bruno am Juli 25, 2013, 14:49:12
Hm,

muss nicht erst ein Bericht geöffnet werden, der dann nach PDF ausgegeben wird und dann wieder geschlossen werden muss, so wie z.B.:
DoCmd.OpenReport "Bericht1", acViewReport
DoCmd.OutputTo acOutputReport, "Bericht1", acFormatPDF, Speicherort & "Test.pdf", False
DoCmd.Close acReport, "Bericht1", acSaveNo
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 25, 2013, 14:57:07
Hallo,

es ist eben so, dass es bei den weiteren Funktionen genau so klappt....

Ich probiere das jetzt mal. Danke.
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 25, 2013, 15:00:13
... das macht es leider auch nicht besser  :( ???
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: 69bruno am Juli 25, 2013, 15:03:35
Ich kann da auch nicht so ganz unterstützen, da meine Access-Version noch kein PDF unterstützt bei outputto.
::)
In einem anderen Forum habe ich dann noch gefunden, dass der Bericht praktisch "unsichtbar" geöffnet ist. Aber ich kann Dir da nicht weiterhelfen......  :-[
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 25, 2013, 15:39:20
Leider kein Effekt...  ???
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: DF6GL am Juli 25, 2013, 20:37:36
Hallo,
Lad die db mal hier hoch... (Zippen!).

Was passiert, wenn die Berichtsabfrage allein geöffnet wird?



PS: Nur bei Printout muss der Bericht geöffnet sein...
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 26, 2013, 10:14:53
Hallo,

ich werd die DB vorbereiten und hier hoch laden...

Hmm, "Was passiert, wenn die Berichtsabfrage alleine geöffnet wird?".... Ich weiß jetzt nicht wie und wonach ich da gucken muss  ???

VG

Claudia
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: DF6GL am Juli 26, 2013, 13:09:55
Hallo,

jetzt aber Claudia...  :o


Es gibt doch im Datenbankfenster/Abfragen eine solche Abfrage entspr. dem Zusammenbau:    "abf_Pruefung_" & Me!Kblanko


Die öffnest Du mit einen Doppelklick darauf.
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 26, 2013, 15:41:33
Danke DF6GL.

Das weiß ich wohl.  :D

Gut, wenn ich die Abfrage alleine öffne dann ist da noch der Wert der letzten Auswahl für den Eintrag der Klausurnummer in Bericht eingetragen bzw. "Where 1 =2 "eingetragen.

Ich habe nun die DB angehängt. Allerdings musste ich vieles an Code raus schmeißen und generell alles etwas ummodeln, damit keine Rückschlüsse auf originale Berechnungen nachvollzogen werden können. Im letzten Schritt ist es mir darum nicht gelungen die Fehlersituation ganz genau wie bei der Originalen DB herzustellen.

Aber im Kern geht es um das selbe Problem beim Ausdrucken der Bewertungsbögen.

Ich würde mich sehr über Tipps freuen.  :)

VG

Claudia

[Anhang gelöscht durch Administrator]
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: DF6GL am Juli 26, 2013, 17:54:22
Hallo,

so wird das nix.. Woher soll man feststellen, welcher Fehler in der Originalversion auftauchen und nicht nur in der Demo..

Allgemein hagelt es von Fehlermeldungen beim Kompilieren.  Dringender Tipp:  In JEDEN Modulkopf Option Explicit  einbauen und die gesamte DB kompilieren.   Bei Referenzen auf eigenerstellte Objekte  Me! statt Me.  verwenden.

Das sieht dann beispielsweise so aus:



If IsNull(Me!Stud_ID) Then Me!txtPrueferID.Visible = False
If IsNull(Me!Stud_ID) Then Me!txtPrueferID2.Visible = False
If IsNull(Me!Stud_ID) Then Me!txtLfdNr.Visible = False
If IsNull(Me!Stud_ID) Then Me!bezLfdNr.Visible = False
If IsNull(Me!Stud_ID) Then Me!txtStudName.Visible = False
If IsNull(Me!Stud_ID) Then Me!LiNachname.Visible = True Else Me!LiNachname.Visible = False
If IsNull(Me!Stud_ID) Then Me!LiVorname.Visible = True Else Me!LiVorname.Visible = False



wobei in besagten Bericht das Feld "txtPrueferID" nicht vorhanden ist und (auch) deswegen  der Bericht nicht gedruckt werden kann.


O. st. Code könnte etwas performanter und übersichtlicher so geschrieben werden:


Private Sub Seitenkopfbereich_Format(Cancel As Integer, FormatCount As Integer)

If IsNull(Me!Stud_ID) Then
   Me!txtPrueferID.Visible = False
   Me!txtPrueferID2.Visible = False
   Me!txtLfdNr.Visible = False
   Me!bezLfdNr.Visible = False
   Me!txtStudName.Visible = False
   Me!LiNachname.Visible = True
   Me!LiVorname.Visible = True
Else
   Me!LiNachname.Visible = False
   Me!LiVorname.Visible = False
End If

End Sub
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 28, 2013, 19:25:55
Hallo,

und vielen dank für die Korrekturhinweise!  :)

Leider klappt der Druck der Blanko-Bögen noch nicht für alle Berichte. In den zu den Berichten gehörenden Abfragen greift die VBA-Filterung anscheinend korrekt. Nur wird der Druck ins PDF nicht durchgeführt.

Wenn ich kompiliere erhalte ich keine Fehlermeldungen.

Habe das alles in der Original DB eingefügt und davon eine um einige Inhalte reduzierte Version erstellt und hier hoch geladen. Nun ist die Fehlersituation in der originalen und reduzierten Situation die Selbe.

Ich finde den Fehler leider nicht.  ???

Ich wäre sehr dankbar, wenn ihr nochmals in die angehängte DB reinschauen würdet.

VG

Claudia



[Anhang gelöscht durch Administrator]
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: DF6GL am Juli 29, 2013, 15:57:01
Hallo,

Verweise im Code auf fehlende Textfelder entfernen.
alle Felder aus der Abfrage im Bericht einbauen und ggfls. unsichtbar setzen, wenn damit nur "weitergerechnet" wird.
In Steuerelementformeln keine Hochkommata in Ausdrücken verwenden (außer sie sind Bestandteil eines Literalstrings)
Fragwürdige Additonen von Zahlen, die als Text in der Tabelle deklariert wurden.



Der Bericht wird nur dann als PDF exportiert, wenn keinerlei Fehlersituationen auftreten

[Anhang gelöscht durch Administrator]
Titel: Re: VBA-Code zum Zurücksetzen einer Auswahl funktioniert nicht
Beitrag von: claudia2324 am Juli 30, 2013, 11:12:54
Vielen Dank  :),

ich versuche mal alles umzusetzen.

Wenns klappt schleiße ich das Thema noch...

VG