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 !
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 !
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 84728
Url: https://administrator.de/forum/access-vba-naechsten-wert-in-listfeld-auswaehlen-und-auslesen-84728.html
Ausgedruckt am: 22.12.2024 um 15:12 Uhr
7 Kommentare
Neuester Kommentar
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
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