1.3k Aufrufe
Gefragt in Datenbanken von dori Einsteiger_in (3 Punkte)
Hi,
brauche mal Eure Hilfe! Bin neu auf dem Gebiet der VBA Programmierung und arbeite noch nicht sehr lange mit Access. Folgende Situation: ich habe ein Formular erstellt in dem ich Datensätze filtern kann. Außerdem habe ich einen Bericht erstellt der meine eigenen Kopf und Fußzeilen enthält. Durch Klick auf eine Schaltfläche im Formular soll der Bericht mit den gefilterten Datensätze angezeigt werden. Der VBA Code (habe ihn in einen forum gelesen) lautet wie folgt:

Private Sub Befehl45_Click()
On Error GoTo Err_Befehl45_Click

Dim stDocName As String
Dim suche As String

stDocName = "Projektdokumente Vorlage"
If Not IsNull(Baugruppenr) And Baugruppenr <> "" And Baugruppenr <> "" Then

suche = "Baugruppenr = '" & Baugruppenr & "'"
End If
DoCmd.OpenReport "Projektdokumente Vorlage", acViewPreview, , suche

Exit_Befehl45_Click:
Exit Sub

Err_Befehl45_Click:
MsgBox Err.Description
Resume Exit_Befehl45_Click

End Sub


Hierbei ist Baugruppenr das Feld nachdem gefiltert wird und Projektdokumente Vorlage der Blanko Bericht.
Nun habe ich folgendes Problem: wenn ich beispielsweise bei der Filterung 3 Datensätze erhalte bekomme ich im Bericht die Datensätze nicht angezeigt allerdings wird im Bericht drei Zeilen angezeigt. Es ist von mir gewünscht, dass unter jeden Datensatz eine Linie aufgeführt wird. Wenn in der Filterung nur ein Datensatz erscheint, bekomme ich auch in den Bericht nur eine Linie angezeigt. Allerdings auch wieder ohne den entsprechenden Datensatz.
Würde mich freuen, wenn Ihr mir weiterhelfen könnt!!!
Gruß
Doris

2 Antworten

0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
Hallo Doris,
um es mal etwas auf die Beine zu stellen:

Private Sub Befehl45_Click()
On Error GoTo Err_Befehl45_Click

Dim stDocName As String
Dim suche As String

stDocName = "Projektdokumente Vorlage"
If Not IsNull(Baugruppenr) And Baugruppenr <> "" Then
suche = "Baugruppenr = '" & Baugruppenr & "'"
DoCmd.OpenReport stDocName , acViewPreview, , suche
End If

Exit_Befehl45_Click:
Exit Sub

Err_Befehl45_Click:
MsgBox Err.Description
Resume Exit_Befehl45_Click

End Sub


Damit kriegst du allerdings bestenfalls für 1 Baugruppennummer den Report, weil dein "suche"-String so gebaut ist, denn im Ergebnis steht da z.B. drin: Baugruppenr = ' 123456'.
Du brauchst aber einen Bereich, z.B.
Baugruppenr >= ' 123456' und Baugruppenr < ' 123666' .
Das müsste denn etwa so aussehen:
suche = "Baugruppenr>='" & Baugruppenr1 & "' AND Baugruppenr<'" & Baugruppenr2 & "'"


Zur suche-Bedingung steht in der Hilfe:
Eine gültige SQL-WHERE-Klausel (ohne das Wort WHERE) oder ein Ausdruck, mit dem Microsoft Access Datensätze aus der dem Bericht zugrunde liegenden Tabelle oder Abfrage auswählt. Wenn Sie einen Filter mit dem Argument Filtername auswählen, wendet Microsoft Access die WHERE-Klausel auf das Filterergebnis an.
Einen Filter hast du nicht angegeben.


Gruß
lorf
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Doris,

hast du das Ganze schon mal mit dem Filterwert des Formulars ausprobiert? Wenn du den auswahlbsierten oder formularbasierten Filter des Formulars verwendest, reicht folgender Code
DoCmd.OpenReport "Projektdokumente Vorlage", acViewPreview, , IIf(Me.FilterOn, Me.Filter, "")
Damit werden genau die Datensätze im Bericht dargestellt, die du auch im Formular gefiltert hast.

Gruß
Ralf
...