Liebe Access-Profis,
wieder mal steh ich vor einem Berg und brauche Hilfe, um rüber zu kommen.
Vorgabe
In einer Abfrage ("qry_STATChronik" - vgl. Query.jpg bzw. QueryDef.jpg) habe ich die Anzahlen von Bescheiden aufgeschlüsselt nach den festgestellten Maßnahmen (Zeilen: Inklusive Beschulung - Probezeit - Regelbeschulung -...) und dem jeweiligen Schuljahr (Spalten 2015/16 - 2014/15 - 2013/14 - ...), in dem der Bescheid erstellt wurde, zusammengestellt.
siehe SQL:
TRANSFORM Count(tbl_BEARBEITUNG_SCH_VER.UMS_FS) AS AnzahlvonUMS_FS
SELECT tbl_LANDKREISE.LKR_NameKurz, tbl_UMSETZUNGEN.UMS_Art_lang
FROM tbl_UMSETZUNGEN INNER JOIN (tbl_SONDERPAEDAGOGIK INNER JOIN (tbl_SCHULARTEN INNER JOIN ((tbl_NATIONEN INNER JOIN tbl_SCHUELER ON tbl_NATIONEN.NAT_PS = tbl_SCHUELER.NAT_FS) INNER JOIN ((tbl_LANDKREISE INNER JOIN tbl_EINRICHTUNGEN ON tbl_LANDKREISE.LKR_PS = tbl_EINRICHTUNGEN.LKR_FS) INNER JOIN tbl_BEARBEITUNG_SCH_VER ON tbl_EINRICHTUNGEN.EIN_PS = tbl_BEARBEITUNG_SCH_VER.EIN_FS) ON tbl_SCHUELER.SuS_PS = tbl_BEARBEITUNG_SCH_VER.SuS_FS) ON tbl_SCHULARTEN.SCM_PS = tbl_EINRICHTUNGEN.SCM_FS) ON tbl_SONDERPAEDAGOGIK.SOP_PS = tbl_BEARBEITUNG_SCH_VER.SOP_FS) ON tbl_UMSETZUNGEN.UMS_PS = tbl_BEARBEITUNG_SCH_VER.UMS_FS
GROUP BY tbl_LANDKREISE.LKR_NameKurz, tbl_UMSETZUNGEN.UMS_Art_lang
PIVOT tbl_BEARBEITUNG_SCH_VER.BEA_SchjBeginn;
Die Spaltenköpfe im Bericht lasse ich per VBA erstellen:
'aktuelles Schuljahr
If Date < DateSerial(lngY, 8, 1) Then
strSchj0 = Right$(lngY - 1, 4) & "/" & Right$(lngY, 2)
ElseIf Date > DateSerial(lngY, 8, 1) Then
strSchj0 = Right$(lngY, 4) & "/" & Right(lngY + 1, 2)
End If
'vorheriges Schuljahr
If Date < DateSerial(lngY, 8, 1) Then
strSchj_1 = Right$(lngY - 2, 4) & "/" & Right$(lngY - 1, 2)
ElseIf Date > DateSerial(lngY, 8, 1) Then
strSchj_1 = Right$(lngY - 1, 4) & "/" & Right(lngY, 2)
End If
...
Me.lbl_Schj0 = strSchj0
Me.lbl_Schj_1 = strSchj_1
...
In der Berichtsansicht werden so die letzten 10 Schuljahre dargestellt und im nächsten Schuljahr fällt das 11 Jahre zurückliegende Schuljahr aus der Liste (vgl. QueryReport.jpg); statt 2015/16 steht an dieser Stelle dann 2016/17.
Wie kann man denn die Werte aus der Kreuztabelle so in die Textfelder einlesen, dass diese korrekt von Jahr zu Jahr mit der Überschrift "mitwandern"?
Viele Grüße
gromax
Liebe Access-Profis,
fortsetzend meiner Fragestellung habe ich viel ausprobiert und bin auf eine Teillösung gestoßen:
Wenn ich in den Code folgende Zeile eintrage:
Me.Daten0.ControlSource = [strSchj0]
- "Daten0" ist der Namen des betreffende Textfeldes innerhalb des Berichts -
dann werden die Detail-Daten korrekt abgebildet.
Jetzt lädt aber der Bericht die Zuweisungen
Me.lbl_Schj0 = strSchj0
Me.lbl_Schj_1 = strSchj_1
Me.lbl_Schj_2 = strSchj_2
Me.lbl_Schj_3 = strSchj_3
Me.lbl_Schj_4 = strSchj_4
Me.lbl_Schj_5 = strSchj_5
Me.lbl_Schj_6 = strSchj_6
Me.lbl_Schj_7 = strSchj_7
Me.lbl_Schj_8 = strSchj_8
Me.lbl_Schj_9 = strSchj_9
nicht mehr. Auch die Überschrift des Berichts ("Staatliches Schulamt Saalhoff ..." - vgl. QueryReport.jpg), die ich über eine öffentliche Variable bereit gestellt habe,
Me.Bezeichnungsfeld77 = p_cstrName2 & " - Bescheide in den letzten Jahren"
wird nicht mehr geladen.
Welche Auswirkung hat denn die Code-Zeile mit dem Ausdruck "ControlSource" in Verbindung mit den übrigen Zuweisungen?
Für Hilfen bin ich immer dankbar!
Viele Grüße
gromax
Hallo Access-Profis,
nun bin ich fast am Ziel; die Antwort auf das im 2. Beitrag aufgeworfene Problem habe ich durch die Umstellung der Reihenfolge innerhalb des Codes gelöst:
Me.Daten0.ControlSource = [strSchj0] 'Anzeige der Werte für das aktuelle Schuljahr
Me.Daten_1.ControlSource = [strSchj_1] 'Anzeige der Werte für das vorherige Schuljahr
Me.Daten_2.ControlSource = [strSchj_2] 'Anzeige der Werte für das vorvorherige Schuljahr
Me.Daten_3.ControlSource = [strSchj_3] 'usw
Me.Daten_4.ControlSource = [strSchj_4]
Me.lbl_Schj0 = strSchj0 'Beschriftung in der Seitenüberschrift mit dem aktuellen Schuljahr
Me.lbl_Schj_1 = strSchj_1 'Beschriftung in der Seitenüberschrift mit dem vorherigen Schuljahr
Me.lbl_Schj_2 = strSchj_2 'Beschriftung in der Seitenüberschrift mit dem vorvorherigen Schuljahr
Me.lbl_Schj_3 = strSchj_3 'usw
Me.lbl_Schj_4 = strSchj_4
Me.lbl_Schj_5 = strSchj_5
Me.lbl_Schj_6 = strSchj_6
Me.lbl_Schj_7 = strSchj_7
Me.lbl_Schj_8 = strSchj_8
Me.lbl_Schj_9 = strSchj_9
Me.Bezeichnungsfeld77 = p_cstrName2 & " - Bescheide in den letzten Jahren" 'Berichtsüberschrift - Titel
Jetzt funktioniert es fast so, wie ich es brauche (vgl. QueryReport2), lediglich die Teilsummen pro Landkreis (BBK und GOB) bzw. die Gesamtsummen kann ich nicht per VBA in die Textfelder eintragen.
Kann mir hier jemand einen Tipp geben, wie ich beim Load-Ereignis die Textfelder mit den entsprechenden Summen-Funktionen versehe.
Vorab vielen Dank!
Viele Grüße
gromax
Hi,
kennst du die Musterlösung für Kreuztabellen-Berichte in Roger's Access Library? Die sollte hier wohl weiterhelfen.
Hallo MaggieMay, hallo Access-Profis,
die Seite von Roger' Library habe ich mir angeschaut und auch einen interessanten Ansatz in der Datei CrossTabReport2k gefunden, doch kann ich diesen auf meinen Bericht nicht übertragen - mir ist das schlichtweg zu professionell und daher auch zu komplex.
Ich bin meinen Weg ein Stück weitergekommen und zwar:
'>>>>>>>>>>>>>>>>>>>>>>>>>>>Berechnung der Schuljahre>>>>>>>>>>>>>>>>>>>>>>>
lngY = Year(Date)
If Date < DateSerial(lngY, 8, 1) Then
strSchj0 = Right$(lngY - 1, 4) & "/" & Right$(lngY, 2)
ElseIf Date > DateSerial(lngY, 8, 1) Then
strSchj0 = Right$(lngY, 4) & "/" & Right(lngY + 1, 2)
End If
...
'>>>>>>>>>>>>>>>>>>>>>>>>>>>Übertrag in die Textfelder des Detailbereichs>>>>>>>>>>>>>>>>>>>>>>>
Me.lbl_Daten0.ControlSource = [strSchj0]
...
'>>>>>>>>>>>>>>>>>>>>Teilsummen im Fußberreich>>>>>>>>>>>>>>>>>>>>>>>
If IsEmpty(Me.lbl_Daten0) Then
Me.lbl_SumGruppe0.ControlSource = ""
Else
Me.lbl_SumGruppe0.ControlSource = "=Sum([" & strSchj0 & "])"
End If
...
'>>>>>>>>>>>>>>>>>>>>>>>>>>>Gesamtsummen im Berichtsfuß>>>>>>>>>>>>>>>>>>>>>>>
If IsEmpty(Me.lbl_Daten0) Then
Me.lbl_SumTotal0.ControlSource = ""
Else
Me.lbl_SumTotal0.ControlSource = "=Sum([" & strSchj0 & "])"
End If
...
'>>>>>>>>>>>>>>>>>>>>>>>>>>>Schuljahre in den Spaltenüberschriften>>>>>>>>>>>>>>>>>>>>>>>
Me.lbl_Schj0 = strSchj0
Die Darstellung des Berichts funktioniert nur solange, solange die Felder in der Abfrage für die einzelnen Spalten (Schuljahre) auch Daten liefern. Ist ein Schuljahr nicht mit einem Wert versehen, so lässt sich der Bericht nicht öffnen (Fehlermeldung: Laufzeitfehler '3021': Kein aktueller Datensatz.).
Wie kann ich denn per VBA die Zuweisung -Me.lbl_Daten_5.ControlSource = [strSchj_5]- unterbinden oder das Textfeld im Bericht (hier "lbl_Daten_5") ausblenden, wenn für dieses Schuljahr gar kein Bescheid hinterlegt ist; aktuell habe ich die betreffenden Zeilen auskommentiert, was bedeutet, dass ich manuell die Code-Zeilen reaktiviere, wenn in dem betreffenden Schuljahr ein Bescheid elektronisch erfasst wurde.
Ich habe im Augenblick keine Idee!
Vielen Dank vorab!
Viele Grüße
gromax
Hallo,
es wäre wohl am einfachsten, wenn du eine Beispiel-DB hochladen könntest, an der man sich das mal anschauen und auf deren Grundlage man dir eine Alternativlösung vorschlagen kann.
Hallo MaggieMay,
danke für das Angebot.
Anbei habe ich die DB mit dem Bericht und der entsprechenden Abfrage angehängt.
Viele Grüße
gromax
Hallo,
ich habe da erstmal noch eine Frage:
ZitatDie Spaltenköpfe im Bericht lasse ich per VBA erstellen:
'aktuelles Schuljahr
If Date < DateSerial(lngY, 8, 1) Then
strSchj0 = Right$(lngY - 1, 4) & "/" & Right$(lngY, 2)
ElseIf Date > DateSerial(lngY, 8, 1) Then
strSchj0 = Right$(lngY, 4) & "/" & Right(lngY + 1, 2)
End If
Was soll passieren, wenn der Bericht am 1. August angefordert wird? ;-)
Mein Vorschlag wäre, den Code folgendermaßen zu vereinfachen:
Private Sub Report_Open(Cancel As Integer)
Dim i As Integer, j As Integer, Y As Integer
Y = Year(Date)
If Date < DateSerial(Y, 8, 1) Then
j = -1
Else
j = 0
End If
For i = 0 To 9
Me("lbl_Schj" & i).ControlSource = "=""" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & """"
Me("lbl_daten" & i).ControlSource = Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2)
Me("lbl_sumGruppe" & i).ControlSource = "=Sum([" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & "])"
Me("lbl_sumTotal" & i).ControlSource = "=Sum([" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & "])"
Next
End Sub
eine entsprechende vereinheitlichende Umbenennung der Steuerelemente vorausgesetzt.
Dann solltest du dafür sorgen, dass in der Kreuztabellenabfrage fixierte Spaltenüberschriften eingesetzt werden, der Code müsste also vor dem Aufruf des Berichts ebenfalls per VBA generiert werden.
BTW:
Die Kontaktdaten der Schulen solltest du nicht als Konstanten im Code definieren sondern in einer Tabelle bereitstellen.
Hallo MaggieMay,
das mit dem 1. August habe ich kapiert! Klar, dass ich diesen Tag ausspare, geht natürlich nicht!
Deine Verkürzung ist genial und sehr professionell - vielen Dank.
Die Darstellung des Berichts funktioniert, wenn auch mit der Einschränkung, dass ich die Spaltenüberschrift fixieren muss. Das bedeutet in letzter Konsequenz, dass ich jedes Jahr "nachsteuern" und das jeweils aktuelle Schuljahr einpflegen muss.
Schön wäre es, wenn ich über eine Variable auf den SQL-Code zugreifen könnte:
Abfrage.SQL = "TRANSFORM Count(tbl_BEARBEITUNG_SCH_VER.UMS_FS) AS AnzahlvonUMS_FS" _
& vbCrLf & "SELECT tbl_LANDKREISE.LKR_NameKurz, tbl_UMSETZUNGEN.UMS_Art_lang" _
& vbCrLf & "FROM tbl_UMSETZUNGEN INNER JOIN (tbl_SONDERPAEDAGOGIK INNER JOIN (tbl_SCHULARTEN INNER JOIN ((tbl_NATIONEN INNER JOIN tbl_SCHUELER ON tbl_NATIONEN.NAT_PS = tbl_SCHUELER.NAT_FS) INNER JOIN ((tbl_LANDKREISE INNER JOIN tbl_EINRICHTUNGEN ON tbl_LANDKREISE.LKR_PS = tbl_EINRICHTUNGEN.LKR_FS) INNER JOIN tbl_BEARBEITUNG_SCH_VER ON tbl_EINRICHTUNGEN.EIN_PS = tbl_BEARBEITUNG_SCH_VER.EIN_FS) ON tbl_SCHUELER.SuS_PS = tbl_BEARBEITUNG_SCH_VER.SuS_FS) ON tbl_SCHULARTEN.SCM_PS = tbl_EINRICHTUNGEN.SCM_FS) ON tbl_SONDERPAEDAGOGIK.SOP_PS = tbl_BEARBEITUNG_SCH_VER.SOP_FS) ON tbl_UMSETZUNGEN.UMS_PS = tbl_BEARBEITUNG_SCH_VER.UMS_FS" _
& vbCrLf & "GROUP BY tbl_LANDKREISE.LKR_NameKurz, tbl_UMSETZUNGEN.UMS_Art_lang" _
& vbCrLf & "PIVOT tbl_BEARBEITUNG_SCH_VER.BEA_SchjBeginn In (2006/07,2007/08,2008/09,2009/10,2010/11,2011/12,2012/13,2013/14,2014/15,2015/16);"
Im obigen Code lasse ich die fixierten Spaltenüberschriften beim Aufruf des Berichts in die Abfrage einlesen und das funktioniert. Gibt es denn eine Möglichkeit, diese Schuljahre über eine Variable einzulesen.
Ich habe dies schon mit meiner alten Konstruktion
lngY = Year(Date)
If Date < DateSerial(lngY, 8, 1) Then
strSchj0 = Right$(lngY - 1, 4) & "/" & Right$(lngY, 2)
ElseIf Date > DateSerial(lngY, 8, 1) Then
strSchj0 = Right$(lngY, 4) & "/" & Right(lngY + 1, 2)
End If
If Date < DateSerial(lngY, 8, 1) Then
strSchj1 = Right$(lngY - 2, 4) & "/" & Right$(lngY - 1, 2)
ElseIf Date > DateSerial(lngY, 8, 1) Then
strSchj1 = Right$(lngY - 1, 4) & "/" & Right(lngY, 2)
End If
If Date < DateSerial(lngY, 8, 1) Then
strSchj2 = Right$(lngY - 3, 4) & "/" & Right$(lngY - 2, 2)
ElseIf Date > DateSerial(lngY, 8, 1) Then
strSchj2 = Right$(lngY - 2, 4) & "/" & Right(lngY - 1, 2)
End If
...
versucht und bin mit den Variablen strSchj0...strSchj1...strSchj2... glatt gescheitert; habe dabei auch mit [strSchj0]...[strSchj1]...[strSchj2]... oder [strSchj0] & "," & [strSchj1] & "," & [strSchj2] & "," & ... mehrere Schreibweisen ausprobiert, mal mit Klammer, mal ohne - aber immer Fehlanzeige.
Wenn dieses klappen würde, dann bräuchte ich nicht mehr jedes neue Schuljahr nacharbeiten und die letzten 10 Schuljahre würden immer abgebildet werden.
Könntest Du nochmal überlegen - bei mir klappt das nicht?
Vielen Dank
gromax
Hi,
du kannst doch die Jahreszahlen in einer Schleife als String generieren und diesen in den Abfrage-Code einbauen.
Beispiel:
Private Sub btn_OpenRepoert_Click()
Dim strSQL A sString, strColumns As String
Dim i, j, Y
Y = Year(Date)
If Date < DateSerial(Y, 8, 1) Then
j = -1
Else
j = 0
End If
For i = 0 To 9
strColumns = strColumns & "," & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2)
Next
StrSQL = "TRANSFORM Count(B.UMS_FS) AS AnzahlvonUMS_FS " & _
"SELECT K.LKR_NameKurz, U.UMS_Art_lang " & _
"FROM tbl_UMSETZUNGEN AS U INNER JOIN (tbl_SONDERPAEDAGOGIK AS P INNER JOIN (tbl_SCHULARTEN AS A INNER JOIN ((tbl_NATIONEN AS N INNER JOIN tbl_SCHUELER AS S ON N.NAT_PS = S.NAT_FS) INNER JOIN ((tbl_LANDKREISE AS K INNER JOIN tbl_EINRICHTUNGEN AS E ON K.LKR_PS = E.LKR_FS) INNER JOIN tbl_BEARBEITUNG_SCH_VER AS B ON E.EIN_PS = B.EIN_FS) ON S.SuS_PS = B.SuS_FS) ON A.SCM_PS = E.SCM_FS) ON P.SOP_PS = B.SOP_FS) ON U.UMS_PS = B.UMS_FS " & _
"GROUP BY K.LKR_NameKurz, U.UMS_Art_lang " & _
"PIVOT B.BEA_SchjBeginn In (" & Mid(strColumns,2) & ");"
CurrentDB.QueryDefs("Abfrage").SQL = strSQL
DoCmd.OpenReport "repname", acViewPreview
End Sub
Wenn du die Überschriften in umgekehrter Reihenfolge haben möchtest, musst du die Schleife halt anders herum laufen lassen:
For i = 9 To 0 Step -1
PS:
Meiner Ansicht nach sollten die einzelnen Spaltenüberschriften in Gänsefüßchen gesetzt werden. Ersatzweise sollte es wohl auch mit einfachen Hochkommata gehen.
Hallo MaggieMay,
ich bekomme diese Codes nicht zusammen; ich verstehe gar nicht, wie ich diesen Code dazu bringen könnte, dass die Variable 'strColumns' in die Datenbank eingetragen wird.
Ich habe jetzt sehr viele Variationen nach 'Versuch und Irrtum' zusammen gefügt, in den meisten Fällen hängt der Code mit Gelb-Markierung bei der Zeile 'dbs.QueryDefs("qry_STATChronik").SQL = strSQL' und es wird ein Syntax-Fehler bei der TRANSFORM-Anweisung angezeigt.
Private Sub Report_Load()
Dim dbs As DAO.Database
Dim Query As DAO.QueryDef
Dim strSQL As String
Dim strColumns As String
Dim i As Integer
Dim j As Integer
Dim Y As Integer
Set dbs = CurrentDb
Set Query = dbs.QueryDefs("qry_STATChronik")
Y = Year(Date)
If Date < DateSerial(Y, 8, 1) Then
j = -1
Else
j = 0
End If
strSQL = "TRANSFORM Count(B.UMS_FS) AS AnzahlvonUMS_FS " _
& "SELECT K.LKR_NameKurz, U.UMS_Art_lang " _
& "FROM tbl_UMSETZUNGEN AS U INNER JOIN (tbl_SONDERPAEDAGOGIK AS P INNER JOIN (tbl_SCHULARTEN AS A INNER JOIN ((tbl_NATIONEN AS N INNER JOIN tbl_SCHUELER AS S ON N.NAT_PS = S.NAT_FS) INNER JOIN ((tbl_LANDKREISE AS K INNER JOIN tbl_EINRICHTUNGEN AS E ON K.LKR_PS = E.LKR_FS) INNER JOIN tbl_BEARBEITUNG_SCH_VER AS B ON E.EIN_PS = B.EIN_FS) ON S.SuS_PS = B.SuS_FS) ON A.SCM_PS = E.SCM_FS) ON P.SOP_PS = B.SOP_FS) ON U.UMS_PS = B.UMS_FS " _
& "GROUP BY K.LKR_NameKurz, U.UMS_Art_lang " _
& "PIVOT B.BEA_SchjBeginn In (" & Mid(strColumns, 2) & ");"
dbs.QueryDefs("qry_STATChronik").SQL = strSQL 'Ziel-Abfrage zum Übertrag in den Bereich der "fixierten Spalten"
For i = 0 To 9
strColumns = strColumns & "," & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2)
Me("lbl_Schj" & i).ControlSource = "=""[strColumns]""" 'Übertrag der Schuljahre in doe Spaltenüberschrift
Me("lbl_daten" & i).ControlSource = Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) 'Übertrag Textfelder des Detailbereiches
Me("lbl_sumGruppe" & i).ControlSource = "=Sum([" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & "])" 'Übertrag der Summenformel in den Gruppenfußbereich
Me("lbl_sumTotal" & i).ControlSource = "=Sum([" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & "])" 'Übertrag der Summenformel in den Berichtsbereich
Next i
strSQL = "TRANSFORM Count(B.UMS_FS) AS AnzahlvonUMS_FS " _
& "SELECT K.LKR_NameKurz, U.UMS_Art_lang " _
& "FROM tbl_UMSETZUNGEN AS U INNER JOIN (tbl_SONDERPAEDAGOGIK AS P INNER JOIN (tbl_SCHULARTEN AS A INNER JOIN ((tbl_NATIONEN AS N INNER JOIN tbl_SCHUELER AS S ON N.NAT_PS = S.NAT_FS) INNER JOIN ((tbl_LANDKREISE AS K INNER JOIN tbl_EINRICHTUNGEN AS E ON K.LKR_PS = E.LKR_FS) INNER JOIN tbl_BEARBEITUNG_SCH_VER AS B ON E.EIN_PS = B.EIN_FS) ON S.SuS_PS = B.SuS_FS) ON A.SCM_PS = E.SCM_FS) ON P.SOP_PS = B.SOP_FS) ON U.UMS_PS = B.UMS_FS " _
& "GROUP BY K.LKR_NameKurz, U.UMS_Art_lang " _
& "PIVOT B.BEA_SchjBeginn In (" & Mid(strColumns, 2) & ");"
Query.SQL = strSQL 'Ziel-Abfrage zum Übertrag in den Bereich der "fixierten Spalten"
Me.Bezeichnungsfeld77 = p_cstrName2 & " - Bescheide in den letzten 10 Schuljahren"
dbs.Close
Set dbs = Nothing
End Sub
Es ist ob der Vielfalt der Möglichkeit nahezu unerschöpflich; ich weiß auch nicht, an welcher Stelle ich mit dem Hochkomme arbeiten könnte bzw. wo ich die Anführungszeichen einpflegen soll.
Sorry - aber ich wäre für einen weiteren Impuls sehr dankbar.
Viele Grüße
gromax
Na, den Code für die Abfrage an die der Bericht gebunden ist musst du natürlich vor dem Öffnen des Berichts aktualisieren - so wie ich es gezeigt hatte. Der Rest gehört dann ins Open-Ereignis des Berichts. Das Load-Ereignis ist ungeeignet, ich dachte der Punkt wäre inzwischen bereits geklärt.
Betrachte das ganze doch einfach mal chronologisch:
Zuerst muss die Abfrage angepasst werden, dann wird der Bericht geöffnet und beim Öffnen des Berichts müssen die Steuerelemente auf bereits bewährte Art besetzt werden.
Hallo MaggieMay,
klasse - einfach klasse! Was bin ich froh, es klappt und vielen, vielen Dank!
Folgend notiere ich die beiden Prozeduren - es könnte ja sein, ein anderer Teilnehmer hat dieses Thema auch verfolgt; die Urheberschaft liegt aber allein bei Dir!!
1. Der Aufruf der ersten Prozedur zur Übergabe der fixierten Spaltennamen an die Abfrage erfolgt über ein Formular mit einer Optionsgruppe (hier: Optionswert 3):
If intEingabe = 3 Then
Y = Year(Date)
If Date < DateSerial(Y, 8, 1) Then
j = -1
Else
j = 0
End If
For i = 0 To 9
strColumns = strColumns & "," & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2)
Next
strSQL = "TRANSFORM Count(B.UMS_FS) AS AnzahlvonUMS_FS " & _
"SELECT K.LKR_NameKurz, U.UMS_Art_lang " & _
"FROM tbl_UMSETZUNGEN AS U INNER JOIN (tbl_SONDERPAEDAGOGIK AS P INNER JOIN (tbl_SCHULARTEN AS A INNER JOIN ((tbl_NATIONEN AS N INNER JOIN tbl_SCHUELER AS S ON N.NAT_PS = S.NAT_FS) INNER JOIN ((tbl_LANDKREISE AS K INNER JOIN tbl_EINRICHTUNGEN AS E ON K.LKR_PS = E.LKR_FS) INNER JOIN tbl_BEARBEITUNG_SCH_VER AS B ON E.EIN_PS = B.EIN_FS) ON S.SuS_PS = B.SuS_FS) ON A.SCM_PS = E.SCM_FS) ON P.SOP_PS = B.SOP_FS) ON U.UMS_PS = B.UMS_FS " & _
"GROUP BY K.LKR_NameKurz, U.UMS_Art_lang " & _
"PIVOT B.BEA_SchjBeginn In (" & Mid(strColumns, 2) & ");"
CurrentDb.QueryDefs("qry_STATChronik").SQL = strSQL
DoCmd.OpenReport "rpt_STATChronik", acViewReport
End If
Ich glaube, der Aufruf des Berichts muss mit dem Parameter 'acViewReport' erfolgen, sonst kann die nachfolgende Prozedur des Load-Ereignisses des Berichts nicht mehr mit den Inhalten in den Textfeldern (Bsp.: >>Me("lbl_Schj" & i).ControlSource = XXX<<) befüllt werden.
2. Nach dem Aufruf des Berichts mit >>DoCmd.OpenReport "rpt_STATChronik", acViewReport<< überträgt der Code die Inhalte in die Textfelder des Berichts:
Private Sub Report_Load()
Dim strSQL As String
Dim strColumns As String
Dim i As Integer
Dim j As Integer
Dim Y As Integer
Y = Year(Date)
If Date < DateSerial(Y, 8, 1) Then
j = -1
Else
j = 0
End If
For i = 0 To 9
Me("lbl_Schj" & i).ControlSource = "=""" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & """" 'Übertrag in die Textfelder der Spaltenüberschrift
Me("lbl_daten" & i).ControlSource = Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) 'Übertrag Textfelder des Detailbereiches
Me("lbl_sumGruppe" & i).ControlSource = "=Sum([" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & "])" 'Übertrag der Summenformel in den Gruppenfußbereich
Me("lbl_sumTotal" & i).ControlSource = "=Sum([" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & "])" 'Übertrag der Summenformel in den Berichtsbereich
Next i
Me.Bezeichnungsfeld77 = p_cstrName2 & " - Bescheide in den letzten 10 Schuljahren"
End Sub
Auch wenn ich vermute, dass die Arbeit an einer DB nie fertig ist, bin ich jetzt ziemlich fertig!!
Vielen Dank nochmals und
alles Gute
gromax
Hallo,
ZitatIch glaube, der Aufruf des Berichts muss mit dem Parameter 'acViewReport' erfolgen, sonst kann die nachfolgende Prozedur des Load-Ereignisses des Berichts nicht mehr mit den Inhalten in den Textfeldern [...] befüllt werden.
wie bereits
mehrfach gesagt, verwende dafür besser das OPEN-Ereignis.