jknapp
Goto Top

Access, VBA, nächsten Wert in Listfeld auswählen und auslesen

Automatisches durchlaufen eines Listfeldes und aufrufen des entsprechenden Berichts in Access

Hallo,

ich habe folgendes Problem:

Je nach dem in einem Listfeld ausgewählten Formular soll ein entsprechender (per Abrfage gefilterter) Bericht (Dienstanweisung) aufgerufen, gedruckt und wieder geschlossen werden.
Das funktioniert auch soweit, nur wenn alle Dienstanweisungen nacheinander gedruckt werden sollen, funktioniert das nicht.

Der Markierungsbalken wandert zwar durch das Listfeld bis zum Ende, aber es wird pro Schleife immer der gleiche Bericht gedruckt.

hier der Code:


Private Sub Button_Printall_Click()

Do Until Kombinationsfeld2.ListIndex = (Kombinationsfeld2.ListCount - 1)

'DoCmd.OpenReport "Fahrerdienstplan3", acViewNormal, "50 Filter Dienstauswahl"
DoCmd.OpenReport "Fahrerdienstplan3", acViewPreview, "50 Filter Dienstauswahl"

If Reports!Fahrerdienstplan3.Pages = 3 Then
DoCmd.PrintOut
DoCmd.OpenReport "leerseite", acViewNormal, "50 Filter Dienstauswahl"
ElseIf Reports!Fahrerdienstplan3.Pages = 1 Then
DoCmd.PrintOut
DoCmd.OpenReport "leerseite", acViewNormal, "50 Filter Dienstauswahl"
ElseIf Reports!Fahrerdienstplan3.Pages = 5 Then
DoCmd.PrintOut
DoCmd.OpenReport "leerseite", acViewNormal, "50 Filter Dienstauswahl"
Else
DoCmd.PrintOut
End If

DoCmd.Close acReport, "Fahrerdienstplan3", acSavePrompt
Kombinationsfeld2.Selected(Kombinationsfeld2.ListIndex + 1) = True
Loop


End Sub

Kann mir jemand sagen warum er nicht den jeweiligen Bericht druckt ? Kann man den Listfeldwert nochmal aktualiesieren oder sowas ?

Vielen Dank !

Content-Key: 84728

Url: https://administrator.de/contentid/84728

Ausgedruckt am: 29.03.2024 um 00:03 Uhr

Mitglied: jato11
jato11 04.04.2008 um 16:27:11 Uhr
Goto Top
Wenn Du alle drucken möchtest, brauchst Du sie doch nicht filtern
Mach doch zwei Makros davon eins mit Filter und das Andere ohne.

Viele Grüße
Torsten
Mitglied: RDiller
RDiller 04.04.2008 um 16:37:45 Uhr
Goto Top
Hallo,

das Problem liegt darin, dass Deine Abfrage den geänderten Wert im Formular nicht erkennen kann - weiß auch nicht so genau wieso.

Aber so könntes Du es hinkriegen.
Der Trick dabei ist, dass du die Abfrage für jeden Wert neu erstellst bevor der Report aufgerufen wird:

Dim sqls As String 'Hier kommt deas SQL Statement rein

Abfragename = "Abfrage2" ' Der Name Deine Abfrage
Anz_zeilen = Kombinationsfeld2.ListCount - 1 'Die Anzahl der Einträge ermitteln. Liestcount startet mit 1, das Kombinationsfeld zum ansprechen mit 0

For Zeilen = 0 To Anz_zeilen
'Im Kombinationsfeld den entsprechenden Eintrag selektieren .Column(Spalte,Zeile)

Me.Kombinationsfeld2 = Me.Kombinationsfeld2.Column(0, Zeilen) 'Das kannst Du Dir eigenlich sparen

'Das SQL-Statement erstellen. Hier muß natürlich Dein Statement stehen (Am besten über den Abfragegenerator in der SQL-Ansicht kopieren

sqls = " SELECT groups.name, groups.description " _
& "FROM Groups " _
& " WHERE groups.name='" & Me.Kombinationsfeld2.Column(0, Zeilen) & "'"

'Die Alte Abfrage löschen

On Error Resume Next 'Damit es weitergeht, falls die Abfrage nicht existiert
DoCmd.DeleteObject acQuery, Abfragename
On Error GoTo 0 'Bei Fehlern stoppen

'Die neue Abfrage erstellen

Set Abfrage = CurrentDb.CreateQueryDef(Abfragename, sqls)

'Und jetzt weiter
DoCmd.OpenReport "Fahrerdienstplan3", acViewPreview, "50 Filter Dienstauswahl"

If Reports!Fahrerdienstplan3.Pages = 3 Then
DoCmd.PrintOut
DoCmd.OpenReport "leerseite", acViewNormal, "50 Filter Dienstauswahl"
ElseIf Reports!Fahrerdienstplan3.Pages = 1 Then
DoCmd.PrintOut
DoCmd.OpenReport "leerseite", acViewNormal, "50 Filter Dienstauswahl"
ElseIf Reports!Fahrerdienstplan3.Pages = 5 Then
DoCmd.PrintOut
DoCmd.OpenReport "leerseite", acViewNormal, "50 Filter Dienstauswahl"
Else
DoCmd.PrintOut
End If

DoCmd.Close acReport, "Fahrerdienstplan3", acSavePrompt
Next


ich denke, das sollte funktionieren

Gruß

Ralf
Mitglied: jknapp
jknapp 05.04.2008 um 21:33:33 Uhr
Goto Top
@jato11
Das ist schon richtig, aber wenn es so einfach wäre würde ich es so machen.
Ich muss ein wenig hocuspokus machen, damit die Ausgabe auf dem Drucker hinterher
genau so aussieht, wie es sein soll.

Wenn du mir sagen kannst, wie ich den bericht dazu bringe, nach einer bestimmten gruppierung
eine Leerseite einzufügen könnte es evtl. so auch gehen, aber das ist mir bisher nicht gelungen.

Zugegebenermassen bin ich eher ein VBA-Loser

@RDiller
Danke, dass könnte gehen. Leider begreif ich absolut ned, warum das nicht auch so funktioniert.
Wenn ich den "Zeilenwechsel" von Hand mache, funktioniert es.

Wofür brauch ich einen "Selected=True"-Befehl, wenn er nur optisch auswirkungen hat ?
Weiss der Gates ! ;O)

Ich poste wenns geht...
Mitglied: jato11
jato11 06.04.2008 um 20:38:29 Uhr
Goto Top
Hast Du schon mal mit den Einstellungen im Bericht Versuche (Vor Bereich usw.) gemacht?

Wenn Du einen Seitenumbruch in den Gruppenkopf einfügst könnte auch eine Leerseite
dabei heraus kommen. Habe ich aber noch nicht ausprobiert.
Wöfür eine ist eine leere Seite Sinnvoll?

Viele Grüße
Torsten
Mitglied: jknapp
jknapp 07.04.2008 um 09:44:09 Uhr
Goto Top
Moin Moin !

wir drucken die Dinger für die Fahrer doppelseitig aus, dabei soll aber nicht Dienstplan
2 auf der Rückseite von Dienstplan 1 beginnen, wenn ich also drei seiten Bericht habe und gebe das an den Druckern, muss eine leerseite folgen (Rückseite 2. Blatt).

Gruß
Jochen
Mitglied: jknapp
jknapp 07.04.2008 um 16:56:53 Uhr
Goto Top
Ich komm damit nicht weiter !

Ich habe jetzt folgenden Code (auszugsweise):

Private Sub Button_Printall_Click()
Dim sqls As String 'Hier kommt das SQL Statement rein
Dim Value As String
Value = "206"

Abfragename = "04_1 Print1" ' Der Name Deiner Abfrage
Anz_zeilen = Kombinationsfeld2.ListCount - 1 'Die Anzahl der Einträge ermitteln. Liestcount startet mit 1, das Kombinationsfeld zum ansprechen mit 0

For Zeilen = 0 To Anz_zeilen
'Im Kombinationsfeld den entsprechenden Eintrag selektieren .Column(Spalte,Zeile)

sqls = " SELECT Fahrerdienstplan_T_temp.TJENEGEN_TJPLAN_NAVN, Fahrerdienstplan_T_temp.GODK_DATO, Fahrerdienstplan_T_temp.FRA_DATO, Fahrerdienstplan_T_temp.TJENEGEN_TJENESTE_NAVN, Fahrerdienstplan_T_temp.TJENEGEN_DELTJEN_LBNR, Fahrerdienstplan_T_temp.TJENEGEN_KODE_NAVN, Fahrerdienstplan_T_temp.DESTNAVN, Fahrerdienstplan_T_temp.Uhrzeit1, Fahrerdienstplan_T_temp.TEKST, Fahrerdienstplan_T_temp.ZNR, Fahrerdienstplan_T_temp.FRA_KL_TUR, Fahrerdienstplan_T_temp.FRA_KL_SORT, Fahrerdienstplan_T_temp.Gruppierung, Fahrerdienstplan_T_temp.KRPLAN, Fahrerdienstplan_T_temp.TRBUS_TURTYPE_LBNR, IIf([Patternnote1] Is Null,0,[Patternnote1]) AS Hinweis, Fahrerdienstplan_T_temp.Komm " _
& "FROM Fahrerdienstplan_T_temp " _
& "WHERE ((Fahrerdienstplan_T_temp.TJENEGEN_TJENESTE_NAVN) = ' " & Value & " ' "


Probleme macht er in der letzten Zeile, beim einfügen der Variablen, die ich zu testzwecken jetzt mal durch "Value" ersetzt habe,
um andere Fehler auszuschliessen.
Egal wie ich die in Anführungszeichen, einfach oder doppelt setze, macht er einen
Syntaxfehler beim ausführen. Habe auch schon " " & Value & " " " versucht, aber das rafft er nicht !

Ist das ein Formatierungsproblem ?
Auf was muss ich da achten ?

Vielen Dank schonmal !

Jochen
Mitglied: jknapp
jknapp 09.04.2008 um 11:25:35 Uhr
Goto Top
Also, das Teil läuft jetzt, manchmal muss man es mal ein, zwei Tage liegenlassen,
dann sieht man auch wieder fehlende Klammern und sowas.

Vielen Dank an Torsten und Ralf für die Hilfe !!!

Der Code von Ralf läuft jetzt einwandfrei.

DANKE !!!

Gruß
Jochen