lege regels printen
Ik heb het niet zozeer kunnen verbeteren, maar het aantal regels flexibeler gemaakt.
De truc is om een module aan te maken, met daarin het volgende:
Global intRecordNummer As Integer
Global intTotaalGroep As Integer
Function SetCount(rep As Report)
intRecordNummer = 0
intTotaalGroep = rep![AccessTotalsnaam].Value
rep![naam].Visible = True
rep![geboortedatum].Visible = True
rep![geslacht].Visible = True
rep![boxDetail].BackStyle = 0
End Function
Function MyMax(ByVal d1 As Integer, ByVal d2 As Integer) As Integer
MyMax = d1
If d2 > d1 Then MyMax = d2
End Function
Je moet hierin alle velden plaatsen die je weg wilt laten op de lege regels. De boxDetail is een kader met lichtgrijze achtergrond die ik om ieder persoon heb staan, die maakt dat je invulregels krijgt. Hier wordt de achtergrond transparant gemaakt.
Je moet de functie SetCount aanroepen in de onprint-event van de groep (expression). Als je meerdere groepen hebt, kies dan de 'laagste' groep. In de header van deze groep staat bij mij een veld met als naam AccessTotalsnaam en controlsource =Count([naam]), die telt dus hoeveel records er zijn.
De functie MyMax is van het type 'beter goed gekopieerd dan slecht zelf verzonnen' omdat VBA geen max-functie blijkt te hebben.
Daarna moet je de onprint-event van de detailsectie hebben. De code van deze procedure is als volgt:
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
Dim dbs As Database
Dim rst As Recordset
Dim rstFilter As String
Dim intMaximum As Integer
'lege regels toevoegen
Select Case [rol].Value
Case "lid"
Set dbs = CurrentDb
rstFilter = "SELECT [maximum aantal leden] FROM [overzicht lessen] WHERE type='" & les.Value & "' AND afkorting='" & txtAfkorting.Value & "' AND dag='" & dag.Value & "'"
Set rst = dbs.OpenRecordset(rstFilter)
intTeller = 1
If Not rst.EOF Then
rst.MoveFirst
intMaximum = rst.Fields("maximum aantal leden").Value + 3
Else
intMaximum = 24
End If
Set rst = Nothing
Set dbs = Nothing
Case "leiding/assistenten"
intMaximum = MyMax(intTotaalGroep + 2, 5)
End Select
If intRecordNummer = intTotaalGroep Then
Me.NextRecord = False
ElseIf intRecordNummer > intTotaalGroep And intRecordNummer < intMaximum Then
Me.NextRecord = False
Me![naam].Visible = False
Me![geboortedatum].Visible = False
Me![geslacht].Visible = False
If intRecordNummer > intMaximum - 3 And [rol].Value = "lid" Then
Me.boxDetail.BackStyle = 1
End If
End If
End Sub
Ik heb aan iedere les in de tabel een maximum aantal leden toegekend, en die lees ik uit. Daar tel ik er drie bij op om het totaal aantal regels te krijgen. Maar die drie laatste regels krijgen een grijze achtergrond omdat de achtergrond dan niet transparant is. Bij leiding en assistenten is dit niet het geval. Het lijstje met leiding en assistenten wordt of 5 regels, of meer als er meer assistenten zijn.
Er is geen foutafhandeling, dus het is niet foolproof, maar voor mijzelf werkt het. Die foutafhandeling moet ik nu gaan doen!