PDA

Vollständige Version anzeigen : Bericht mit Datumsfilter


stefanie_roth
06.07.2006, 08:03
Hallo!

Ich habe eine Bericht, über den ich quartalsweise, halbjährlich, jährlich und auf Anfrage auch monatlich die KFZ-Kosten unserer Firma ausgebe. Dieser Bericht basiert auf einer Abfrage, über die ich die entsprechenden Kriterien definiere, was insbesondere das Datum betrifft.
Jedenfalls wollte ich mir die Arbeit ein bisschen erleichtern und ein Formular entwerfen, in dem ich das Datum einschränke und dann den Bericht aufrufe. Dazu habe ich einen Code in einem Buch gefunden, was ich allerdings ein bisschen auf meine Bedürfnisse angepasst habe.

Das Problem: Ich kann das Anfangsdatum (BDatum) nicht variieren, sondern nur das Enddatum, aber ich kann den Fehler einfach nicht finden.

Hier der Code (für das Formular):


Option Compare Database
Option Explicit
Dim BDat$, EDat$

Private Sub Form_Load()
BDatum = Date - 365
EDatum = Date
Text1.Value = BDatum
Text2.Value = EDatum
Call setFilter1
End Sub

Private Sub setFilter1()
BDat = Format$(BDatum, "\#m\/d\/yy\#")
EDat = Format$(EDatum, "\#m\/d\/yy\#")
filter1 = " (Belegdatum >= " & BDat & ") AND (Belegdatum <= " & EDat & ")"
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
On Error Resume Next
BDatum = CDate(Text1.Text)
Call setFilter1
End Sub

Private Sub Text2_KeyUp(KeyCode As Integer, Shift As Integer)
On Error Resume Next
EDatum = CDate(Text2.Text)
Call setFilter1
End Sub

Private Sub Befehl4_Click()
variante = 1
DoCmd.OpenReport "KFZ-Kosten I Quartal 2006", acViewPreview, "KFZ-Kosten I Quartal 2006", filter1
End Sub


Im Bericht steht folgender Code:


Option Compare Database
Option Explicit

Private Sub Report_Open(Cancel As Integer)
Label1.Caption = "Bericht vom " & Str$(BDatum) & " bis " & Str$(EDatum)
Me.FilterOn = False
Select Case variante
Case 1: Me.FilterOn = True
End Select
End Sub


Ich hoffe, es kann mir jemand weiterhelfen.

Vielen Dank und beste Grüße,
Steffi

J_Eilers
06.07.2006, 09:20
Hi,

ich würd den Code gern vergessen und neu anfangen. Okay? Beschreibe bitte mal kurz, was für Möglichkeiten man im Formular hat und was dabei geschehen soll. Den Bericht dann gefiltert zu öffnen ist das kleinste Problem.

stefanie_roth
06.07.2006, 09:38
Okay. :)

Im Formular gibt es eigentlich nur drei Felder: Zwei Bezeichnungsfelder, in denen das Anfangs- und Enddatum eingetragen wird und eine Schaltfläche, die den Bericht startet. Das war's eigentlich schon.

Ich bin noch der absolute Newbie was VBA anbelangt und versuche mir das so gut wie es geht selbst, über die Hilfe, Literatur und natürlich dieses Forum beizubringen. Deswegen: bitte Nachsicht... :)

Danke schon mal für deine Hilfe!

Steffi

J_Eilers
06.07.2006, 09:51
Dann machen wir es mal ganz einfach:

Dim strKrit As String

If IsDate(Me!BDatum) And IsDate(Me!EDatum) Then
strKrit = "Belegdatum Between " & Format(Me!BDatum, "\#yyyy\-mm\-dd\#)
strKrit = strKrit & " AND " & Format(Me!EDatum, "\#yyyy\-mm\-dd\#)
End If

DoCmd.OpenReport "KFZ-Kosten I Quartal 2006", acViewPreview, , strKrit

Fragen?

stefanie_roth
06.07.2006, 10:47
Ich hab jetzt mal ein bisschen rumprobiert, aber irgendwie bekomme ich das nicht so richtig hin.
Zunächst einmal weiß ich gar nicht, was strKrit ist!? Hab zwar mal in der Hilfe geguckt und im Internet recherchiert, find aber nix? Str bezeichnet doch ein Steuerelement oder? Muss ich da in meinem Formular noch was einstellen?
Außerdem hatte ich bei den Zeilen mit Format einen Syntaxfehler, den ich meinte behoben zu haben, aber jetzt sieht der 'yyyy' als Variable an...

Wahrscheinlich ist auch das 'Drumherum bei mir total falsch, aber ich poste den Code trotzdem mal, auch wenn's peinlich werden könnte...

Dim strKrit As String

Private Sub Befehl4_Click()
If IsDate(Me!BDatum) And IsDate(Me!EDatum) Then
strKrit = " Belegdatum Between " & " Format Me!BDatum, " \ yyyy \ -mm \ -dd#
strKrit = strKrit & " AND " & " Format Me!EDatum, " \ yyyy \ -mm \ -dd#
End If
DoCmd.OpenReport "KFZ-Kosten I Quartal 2006", acViewPreview, , strKrit
End Sub

Private Sub Befehl5_Click()
DoCmd.Close
End Sub

So, du merkst, eigentlich hab ich keine Ahnung von dem, was ich tu.... :-)
Ich hoffe, ich nerve nicht allzu sehr...

DANKE!!!

Steffi

stefanie_roth
06.07.2006, 10:52
Bezeichnet strKrit ein Kriteriumsstring!? Wenn ja, was bewirkt das?

J_Eilers
06.07.2006, 11:08
strKrit ist eine Variable vom Typ String, die ich mir einfach erstellt habe, damit es etwas übersichtlicher ist. Um eine Variable zu füllen, kann man ihr entweder einen Wert übergeben (Var = Me!Feld) oder auch den Variableninhalt behalten und etwas anhängen (var = var & Me!Feld) oder auch etwas hardcodieren (in VBA) und dann sich auf einen Feldinhalt beziehen (var = "Text" & Me!Feld). Etwas hardcodiertes beginnt immer mit einem Gänsefüßchen, alles innerhalb der Gänsefüßchen wird dabei in die Variable übernommen. Danach kommt wieder ein Gänsefüßchen. Normalerweise ist danach Schluss, um nun eine Verkettung zu erreichen, nimmt man das & und führt damit den String weiter:

var = "Harcodierter Text " & var & Me!Feldwert & " anderer hardcodierter Text"

Die Formatierung ist bei einem Datumsfeld vorgegeben, da Access es nur in 2 Formaten als Kriterium aktzeptiert! Deswegen auch die andere Formatierung. Versuche es doch einfach mal mit folgendem Code, damit sollte es eigentlich funktionieren. Falls nicht, wäre das Ergebnis von Interesse. Denn Hellsehen kann ich nicht ;)

Private Sub Befehl4_Click()
Dim strKrit As String

If IsDate(Me!BDatum) And IsDate(Me!EDatum) Then
strKrit = " Belegdatum Between " & Format(Me!BDatum, "\#yyyy\-mm\-dd\#)
strKrit = strKrit & " AND " & Format(Me!BDatum, "\#yyyy\-mm\-dd\#)
End If

DoCmd.OpenReport "KFZ-Kosten I Quartal 2006", acViewPreview, , strKrit
End Sub

Private Sub Befehl5_Click()
DoCmd.Close
End Sub

stefanie_roth
06.07.2006, 12:29
:-) Das strKrit eine Variable ist, hab ich mir zuerst gedacht. Aber dann dachte ich, dass das zu banal sei...

So, habe das jetzt noch mal eingefügt, aber das funzt immer noch nicht. Es ist immer noch der Syntaxfehler in

strKrit = " Belegdatum Between " & Format(Me!BDatum, "\#yyyy\-mm\-dd\#)
strKrit = strKrit & " AND " & Format(Me!BDatum, "\#yyyy\-mm\-dd\#)

Und zwar: Fehler beim Kompilieren Listentrennzeichen oder ) erwartet...

Sonst ist alles okay

Steffi

J_Eilers
06.07.2006, 12:58
Autsch, klar...ich hab die Gänsefüßchen bei der Formatierung vergessen :stupid:

strKrit = " Belegdatum Between " & Format(Me!BDatum, "\#yyyy\-mm\-dd\#")
strKrit = strKrit & " AND " & Format(Me!BDatum, "\#yyyy\-mm\-dd\#")