Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Dyn. Bericht – Schleifen – textfelder.visible zur besseren lesbarkeit

Begonnen von mad, Februar 13, 2024, 02:21:49

⏪ vorheriges - nächstes ⏩

mad

Hallo Zusammen,

habe mir aus einer Muster-DB aus dem Internet und diversen Forenbeiträgen einen dynamischen Bericht erstellt.
Dieser zeigt auf Basis der KT "abfLehrgaengeKreuz" im Seitenkopf nur die entsprechenden Spaltenbezeichnungen/-beschriftung an die eben die KT vorgibt. Da die Anzahl der Spalten variieren können habe ich im Bericht aktuell 33 Spalten mit den Namen ,,Label0" bis ,,Label32" und dem jeweiligen Steuerelementeinhalt ,,=lehrgfeld(0)" bis ,,=lehrgfeld(32)" vorgegeben.

Dazu gibt es ein Modul und diverse Codes beim öffnen des Berichst, siehe alle unten.

Soweit funktioniert das ganze auch. Allerdings ist der Bericht (DIN A3) ohne das die Felder die Rahmenart ,,Durchgezogen" haben und somit einen Tabellencharakter sehr unübersichtlich und schwer lesbar.
Wenn ich die Felder mit der Rahmenart ,,Durchgezogen" formatiere ist das ganze deutlich besser, allerdings werden dann natürlich alle Felder so angezeigt obwohl diverse Spalten ohne Inhalt sind.

Um dem entgegen zu wirken würde ich gerne die Textfelder im Seitenkopf (Spaltenbeschriftung) und die dazugehörigen Textfelder im Detailbereich (Daten) erstmal als ,,nicht sichtbar" formatieren und nur die sichtbar (.visible) anzeigen wollen die eben auf Basis der KT "abfLehrgaengeKreuz" auch wirklich Text/Daten enthalten.

In anderen Berichten bzw. Formularen mache ich das z.B. wie folgt: ,,Me!Textfeld.Visible = True"

Allerdings weis ich nicht wie bzw. wo ich das ,,.visible" einbauen muß/kann da ja hier ,,Schleifen" durchlaufen werden.
Ich hoffe die Infos sind soweit verständlich und ausreichend.

Könnte mir jemand bei meinem Problem helfen?

Modul:
Sub ShowDataTypes()
Dim db As DAO.Database
Dim tdf As TableDef
Dim fld As DAO.Field

Set db = CurrentDb
Set tdf = db.TableDefs("tblFieldTypes")
    For Each fld In tdf.Fields
        Debug.Print fld.Name, fld.Type
       
    Next fld

End Sub


Codes beim öffnen des Berichts:
Option Compare Database
Option Explicit
Dim ReportLabel(33) As String



Private Sub Report_Open(Cancel As Integer)
    DoCmd.Maximize
Dim i As Integer
    For i = 0 To 33
        ReportLabel(i) = ""
    Next i
    Call CreateReportQuery
End Sub
                                   


Sub CreateReportQuery()
On Error GoTo Err_CreateQuery
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim indexx As Integer
Dim FieldList As String
Dim strSQL As String
Dim i As Integer

Set db = CurrentDb
Set qdf = db.QueryDefs("abfLehrgaengeKreuz")
indexx = 0
    For Each fld In qdf.Fields
        If fld.Type >= 1 And fld.Type <= 8 Or fld.Type = 10 Then
            FieldList = FieldList & "[" & fld.Name & "] as Field" & indexx & ", "
            ReportLabel(indexx) = fld.Name
        End If
        indexx = indexx + 1
    Next fld
    For i = indexx To 33 '<<
            FieldList = FieldList & "null as Field" & i & ","
     Next i
     FieldList = Left(FieldList, Len(FieldList) - 1)
     
 strSQL = "Select " & FieldList & " From abfLehrgaengeKreuz"
    db.QueryDefs.Delete "abfLehrgKTBericht"
    Set qdf = db.CreateQueryDef("abfLehrgKTBericht", strSQL)
 
Exit_CreateQuery:
    Exit Sub
   
Err_CreateQuery:
    If Err.Number = 3265 Then
        Resume Next
    Else
        MsgBox Err.Description
        Resume Exit_CreateQuery
    End If
End Sub



Function lehrgfeld(LabelNumber As Integer) As String
    lehrgfeld = Nz(ReportLabel(LabelNumber), "")
End Function

Gruß
mad