Office: (Office 365) Bericht mit optionalen Feldern

Helfe beim Thema Bericht mit optionalen Feldern in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo Zusammen, in einem Bericht sollen bestimmte Felder nur auftauchen, wenn das Kontrollkästchen ResIncl im Eingabeformular frm_Einheitendaten_reg... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von DasKrokodil, 2. November 2023.

  1. Bericht mit optionalen Feldern


    Hallo Zusammen,
    in einem Bericht sollen bestimmte Felder nur auftauchen, wenn das Kontrollkästchen ResIncl im Eingabeformular frm_Einheitendaten_reg angehakt wurde. Bedingung: Das soll auch funktionieren, wenn das Eingabeformular geschlossen ist.

    Ich habe dazu im Detailbereich des Berichts folgenden Code beim Ereignis Beim Formatieren eingebaut:

    Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
    If Me!ResIncl = False Then
    Me!Seitenumbruch116.Visible = False
    Me!ResTitle.Visible = False
    Me!ResText.Visible = False
    Else
    Me!Seitenumbruch116.Visible = True
    Me!ResTitle.Visible = True
    Me!ResText.Visible = True
    End If
    End Sub

    Das Feld ResIncl ist im Bereichtslayout nicht sichtbar. Soweit funktioniert das alles auch schon. Nur eigentlich gehört dieses Feld ja gar nicht in den Bericht. Besser wäre es, den Wert über eine globale Variable mittels einer Funktion aus der zugehörigen Abfrage zu holen:

    If GetResInclVal = False Then
    Me!Seitenumbruch116.Visible = False
    etc.

    Die Funktion (in einem eigenen Modul) sieht momentan so aus:

    Function GetResInclVal() As String
    Dim db As Database
    Dim Lrs As DAO.Recordset
    Dim LSQL As String
    Dim LResIncl As String

    Set db = CurrentDb()
    LSQL = "select ResIncl from qry_AppReport"

    Set Lrs = db.OpenRecordset(LSQL)

    If Lrs.EOF = False Then
    LResIncl = Lrs("ResIncl")
    Else
    LResIncl = "Not found"
    End If

    Lrs.Close

    Set Lrs = Nothing

    GetResInclVal = LResIncl

    End Function

    Leider liefert die Funktion aber immer nur den Wert "Wahr" egal was in ResIncl steht. Hier ein Screenshot der Abfrage:
    Bericht mit optionalen Feldern upload_2023-11-2_14-50-2.png

    Kann mir bitte jemand auf die Sprünge helfen?

    Danke!
    Stefan
     
    DasKrokodil, 2. November 2023
    #1
  2. andyfau
    andyfau Erfahrener User
    Hallo Stefan,

    wenn die Function in einem eigenen Modul liegt und von anderen Modulen aufgerufen werden soll, sollte sie als Public Function erstellt sein.

    Der Übergabewert aus einem Recordset : LResIncl = Lrs!ResIncl gibt den boolschen Wert und keinen String wieder.

    Warum fragst Du ihn nicht direkt ab?

    Gruß
    Andreas
     
    andyfau, 2. November 2023
    #2
  3. Hallo Andreas,
    anfangs hatte ich versucht per
    If [Formulare]![frm_Einheitendaten_reg]![ResIncl] = False Then
    usw.
    den Wert zu erhalten. Das geht aber nicht, wenn das Formular geschlossen ist. Daher der Weg über die Funktion. Oder übersehe ich grad was einfacheres?
     
    DasKrokodil, 2. November 2023
    #3
  4. andyfau
    andyfau Erfahrener User

    Bericht mit optionalen Feldern

    Richtig, auf Steuerelemente eines geschlossenen Formulars kann nicht zugegriffen werden. Aber auch ein Formular hat als Grundlage ja ein Recordset, was Du ja auch durch eine Abfrage erzeugen kannst. Dann kannst Du auf dessen Datensätze zugreifen. Um einen definierten Zustand des Recordsets zu haben, soltest Du zuerst schauen, ob das Recordset Sätze enthält. (Lrs.Count) und dann auf den ersten Datensatz positionieren (Lrs.MoveFirst).
     
    andyfau, 2. November 2023
    #4
  5. Hallo Andreas,
    hab mal versucht Deine Vorgehensweise umzusetzen indem ich die dem Bericht zu Grunde liegende Abfrage qry_AppReport als Recordset öffne. Leider gibt mir ResInclVal = Lrs!ResIncl aber immer nur Wahr zurück (per Debug.Print), obwohl nicht alle Check Boxes im Recordset einen Haken haben. ResInclVal habe ich als Boolean definiert. Irgendwas übersehe ich noch?

    Hier der momentane Code. Jetzt direkt in der Sub:

    Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
    Dim db As Database
    Dim Lrs As DAO.Recordset
    Dim ResInclVal As Boolean

    Set db = CurrentDb()
    Set Lrs = db.OpenRecordset("qry_AppReport")

    Lrs.MoveLast
    Lrs.MoveFirst

    If Lrs.RecordCount > 0 Then
    If Lrs.EOF = False Then
    ResInclVal = Lrs!ResIncl
    Debug.Print ResInclVal
    If ResInclVal = False Then
    Me!Seitenumbruch116.Visible = False
    Me!ResTitle.Visible = False
    Me!ResText.Visible = False
    Else
    Me!Seitenumbruch116.Visible = True
    Me!ResTitle.Visible = True
    Me!ResText.Visible = True
    End If
    Else
    MsgBox "Wert nicht gefunden!"
    End If
    Else
    MsgBox "Keine Datensätze vorhanden!"
    End If

    Lrs.Close
    Set Lrs = Nothing

    db.Close
    Set db = Nothing
    End Sub
     
    DasKrokodil, 3. November 2023
    #5
  6. Doming
    Doming hat Ahnung
    Moin Krokodil,
    versuche mal, Deinen Code mit den entsprechenden Tags zu versehen, damit man ihn besser lesen kann.
    Dieser Code müsste etwa dem entsprechen, was Deiner getan hat, oder?
    Code:
    Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
     Dim db As Database
     Dim Lrs As DAO.Recordset
     Dim ResInclVal As Boolean
    
        Set db = CurrentDb
        Set Lrs = db.OpenRecordset("qry_AppReport")
        If Not Lrs.EOF And Not Lrs.BOF Then
            ResInclVal = Nz(Lrs!ResIncl, False)
            Debug.Print ResInclVal
            Me!Seitenumbruch116.Visible = ResInclVal
            Me!ResTitle.Visible = ResInclVal
            Me!ResText.Visible = ResInclVal
        Else
            MsgBox "Wert nicht gefunden!"
        End If
    
        Lrs.Close
        Set Lrs = Nothing
        db.Close
        Set db = Nothing
    End Sub
    Ändere den Debug doch mal in debug.print "ResInclVal: " & ResInclVal, "ID :" & Lrs!id
    Und guck in qry_AppReport nach, welchen Wert ResInclVal in der Zeile mit dieser ID hat.
    Gruß
    Doming
     
  7. Hallo Doming,
    danke für den Input und sorry für die fehlenden Tabs.

    Das neue Debug.Print Statement liefert mit Deinem Code 30 Zeilen mit diesem Inhalt:
    ResInclVal: Wahr ID :167

    Die Abfrage enthält 5 Datensätze und sieht für ID und ResIncl so aus:
    Bericht mit optionalen Feldern upload_2023-11-3_15-15-15.png


    Hängt also immer am selben Datensatz fest. Hab mal eine Schleife drum gebastelt:

    Do Until Lrs.EOF
    If Not Lrs.EOF And Not Lrs.BOF Then
    ResInclVal = Nz(Lrs!ResIncl, False)
    Debug.Print "ResInclVal: " & ResInclVal, "ID:" & Lrs!ID
    Me!Seitenumbruch116.Visible = ResInclVal
    Me!ResTitle.Visible = ResInclVal
    Me!ResText.Visible = ResInclVal​
    Else
    MsgBox "Wert nicht gefunden!"​
    End If​
    Lrs.MoveNext
    Loop​

    Funktioniert leider noch nicht richtig. Im Bericht fehlen der Seitenumbruch und die Textfelder ResTitle und ResText bei allen Datensätzen, auch für diejenigen, für die ResInclVal = Wahr ist. Im Direktbereich erhalte ich diese 5 Zeilen 20 mal wiederholt:
    ResInclVal: Wahr ID:167
    ResInclVal: Falsch ID:380
    ResInclVal: Wahr ID:382
    ResInclVal: Wahr ID:405
    ResInclVal: Falsch ID:429

    Irgendwas passt an der Schleife noch nicht... Grübel...
     
    DasKrokodil, 3. November 2023
    #7
  8. Doming
    Doming hat Ahnung

    Bericht mit optionalen Feldern

    vorzugsweise ein eckige(codeeckige) am Anfang und hinten ein eckige(/code eckige) dann wird der Code brauchbar dargestellt.
    Was passiert denn, wenn Du ganz ohne Schleife das Visible stumpf auf true setzt?
    Dein Debug.Print zeigt ja, dass er das Feld richtig ausliest.
    Nicht, dass Du die ganze Zeit an der falschen Stelle suchst?
     
  9. Wenn ich die Do Until- und MoveNext/Loop-Anweisung auskommentiere und die Visibles wie vorgeschlagen auf True setze, dann werden die drei Steuerelemente bei jedem Datensatz angezeigt (also auch, wenn ResIncl nicht angehakt ist).

    Im Direktbereich erhalte ich 30 Zeilen mit:
    ResInclVal: Wahr ID:167

    Also ohne Schleife, bleibt Access beim ersten Datensatz hängen.

    Vielleicht liegt das Problem daran, dass mir nicht klar ist, wie das Ereignis "Beim Formatieren" genau abläuft und wie es mit der Prozedur richtig zusammen spielt. Komisch ist auch die Anzahl der Debug.Print Zeilen, wenn die Schleife vorhanden ist: Die 5 Datensätze werden 20x durchlaufen (=100 Zeilen im Direktbereich). Warum 20x?
     
    DasKrokodil, 3. November 2023
    #9
  10. Doming
    Doming hat Ahnung
    Hast Du mal versucht, die Abarbeitung des Codes schrittweise durchlaufen zu lassen?
    Stopmarke setzen und den Code zeilenweise checken (F8).
     
  11. andyfau
    andyfau Erfahrener User
    Ich glaube, es liegt eher daran, dass Du versuchst einzelne Daten im Detailbereich der Reihe nach ein und auszublenden. Das funktioniert nicht. Der Detailbereich verhält sich wie eine Endlosformular. Werden Formatierungen auf ein Steuerelement einer "Zeile" vorgenommen, wirken sich diese immer auf alle gezeigten Datensätze aus. Ein Lösungsansatz: Bedingte Formatierung.
     
  12. Danke für Eure Rückmeldungen! Es ist so, wie Andreas es beschrieben hat.
    Der Bericht stellt auf jeder Seite bestimmte Felder eines Datensatzes dar. Manchmal sollen auf einer separaten Seite zusätzliche Felder des Datensatzes eingeblendet werden. Deshalb der optionale Seitenumbruch und die optionalen Felder ResTitle und ResText. Diese sollen im Bericht eingeblendet werden, wenn im zugehörigen Formular das Kontrollkästchen ResIncl angeklickt wurde. Guter Hinweis mit dem Verhalten des Detailbereichs wie bei einem Endlosformular. Ich versuche das mal mit der Bedingten Formatierung umzusetzen. Einen Workaround mit dem (unsichtbaren) ResIncl Feld im Detailbereich gibt es ja schon (s.o.).
     
    DasKrokodil, 4. November 2023
    #12
Thema:

Bericht mit optionalen Feldern

Die Seite wird geladen...
  1. Bericht mit optionalen Feldern - Similar Threads - Bericht optionalen Feldern

  2. Bericht per VBA formatieren

    in Microsoft Access Hilfe
    Bericht per VBA formatieren: Hallo, kann ich in einem Bericht die Rahmenfarbe im Detailbereich, auf Grundlage eines Werts im Datenfeld (lblZeitrahmen) verändern? Wert 1 = Orange Wert 2 = Rot Wert 3 = grün Wert 4 = blau...
  3. Im Bericht nach Gruppen sortieren

    in Microsoft Access Hilfe
    Im Bericht nach Gruppen sortieren: Hallo zusammen Ich habe eine Frage auf die ich keine Antwort gefunden habe. Ich habe in einer DB verschiedene Länder mit Städten und deren Einwohner. Jetzt will ich in einem Bericht diese Länder...
  4. betimmten Montag als Datum in Bericht anzeigen

    in Microsoft Access Hilfe
    betimmten Montag als Datum in Bericht anzeigen: Hallo, Ich möchte in Access einen Bericht erstellen. Der holt verschiedene Daten und stellt die dar. Der Bericht soll eine Überschrift bekommen, unter anderem mit zwei Datumsangaben: einmal das...
  5. 2 Berichte in eine Excel-Datei exportieren

    in Microsoft Access Hilfe
    2 Berichte in eine Excel-Datei exportieren: Hallo, ich möchte gerne 2 Berichte per VBA in je ein Register einer Excel-Datei exportieren, die dabei erstellt werden soll. Mit dem Befehl "DoCmd.OutputTo acOutputReport, "Bericht1", acFormatXLS,...
  6. Access Berichte

    in Microsoft Access Hilfe
    Access Berichte: ich habe einen Bericht erstellt mit Datenbasis einer Abfrage. Nun möchte ich in einem Formular unter Verwendung eines Kombinationsfeldes einen Datensatz auswählen und diesen im Bericht ausgeben....
  7. Bericht Seiten (PDF) formatieren

    in Microsoft Access Hilfe
    Bericht Seiten (PDF) formatieren: Hallo, ich falle einmal am besten mit der Tür ins Haus. Ich habe mir eine DB erstellt mit den Daten zu Schiffen als Datensätze. Das Ziel ist es, zu jedem Schiff einen Datensatz als PDF auszugeben....
  8. DOMAnzahl in einem Bericht

    in Microsoft Access Hilfe
    DOMAnzahl in einem Bericht: Hey Ihr Lieben, kurze Frage zu dem Ausdruck "DOMAnzahl". Ich habe eine Abfrage erstellt. Spalte 1: Autos Spalte 2: Farbe (Rot, grün, gelb) Spalte 3: Dokumentationsdatum Auf dieser Basis...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden