lege regels toevoegen aan rapport

Status
Niet open voor verdere reacties.

edegids

Gebruiker
Lid geworden
15 nov 2000
Berichten
37
Ik heb gegevens van leden in een tabel. Daarvan wil ik een presentielijst uitprinten, waar de presentie van de diverse leden voor die maand kan worden bijgehouden.

Nu wil ik altijd 18 regels in de detailsectie van het rapport, ook al zijn er maar 10 records. In de detail-sectie heb ik kaders getekend om vakjes te maken. Deze lijnen moeten dus wél uitgeprint worden. Ik zou dus graag na de 10e persoon nog 8 keer de detail-sectie uitprinten, maar dan zonder inhoud. Hoe doe ik dit?

Ik heb in VBA al wel een teller die bijhoudt welke record geprint wordt en ik heb een variabele die het totaal aantal records 'weet'. Ik heb dus alleen het commando nodig voor het uitprinten van een 'lege' regel details. Ik kom er echter niet uit.... wie helpt?

Alvast bedankt!
 
18 regels

Ik zou de oplossing zoeken in een tabel met 18 records link die aan je tabel die de data bevat en geef in de query aan dat je alle velden uit de tabel met 18 records wil zien.

Je zou ook een kunnen kijken naar de eigenschappen van je rapport daar zitten ook nog wel wat mogelijkheden als het gaat om een layout die je altijd gelijk wil houden
 
Voordat je aan een oplossing werkt, is het misschien handig om het 'probleem' eerst wat duidelijker te omlijnen, want doe je bijvoorbeeld als er 19 records in de detailsectie zitten?
 
Op deze pagina van Microsoft kun je overigens een functie vinden die je kunt gebruiken, en kun je een voorbeeldbestand downloaden. Ik zou zeggen: bestuur dat eens...
 
print vast aantal regels

Beste Michel,

er kunnen niet meer dan 18 records in de recordset zitten, daar heb ik al voor gezorgd....

Maar je link lijkt op wat ik nodig heb. Ga ik proberen. Dank je, had zelf al zitten zoeken maar kwam niets zinnigs tegen.

Groet,
Esther
 
Als je er niet helemaal uitkomt, is het misschien handig om een voorbeeldje te posten; dan kunnen we wat meer op jouw specifieke situatie ingaan.
 
Het werkt! Ik heb iets anders gedaan, maar in grote lijnen de instructies in je link gevolgd. Dank je!
 
Als je de truc hebt kunnen opslimmen, is het misschien wel handig als je jouw oplossing nog even uitlegt; dan hebben anderen er ook nog iets aan. Ben zelf ook wel benieuwd...
 
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!
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan