Origineel KB-nummer: 812719
In dit artikel wordt beschreven hoe u programmatisch een kolom maakt in een Access-rapport. U kunt de kolom dynamisch toevoegen aan het rapport met behulp van methode 1 of methode 2 die worden beschreven in de sectie Meer informatie.
Notitie
De voorbeeldcode in dit artikel maakt gebruik van Microsoft Data Access-objecten. Deze code wordt alleen correct uitgevoerd als u naar de Microsoft DAO 3.6-objectbibliotheek verwijst. Klik hiervoor op Verwijzingen in het menu Extra in de Visual Basic-Editor en zorg ervoor dat het selectievakje Microsoft DAO 3.6-objectbibliotheek is ingeschakeld.
Methode 1: Kolommen programmatisch toevoegen aan het rapport
In het volgende voorbeeld ziet u hoe u programmatisch een Access-rapport maakt. De code genereert een rapport dat is gebaseerd op een recordbronquery. In het gegenereerde rapport worden de kolom Firstname en de kolom Lastname van de tabel Werknemers van de Northwind.mdb voorbeelddatabase weergegeven.
Start Access.
Klik in het menu Help op Voorbeelddatabases en klik vervolgens op Voorbeelddatabase northwind. Sluit het formulier Hoofdschakelbord wanneer dit wordt weergegeven.
Notitie
Klik in Access 2007 op Voorbeeld in het deelvenster Sjablooncategorieën , klik op Northwind 2007 en klik vervolgens op Downloaden.
Klik in het linkerdeelvenster op Rapporten.
Notitie
Sla in Access 2007 deze stap over.
Dubbelklik in het rechterdeelvenster op Rapport maken in de ontwerpweergave.
Notitie
Klik in Access 2007 op Rapportontwerp in de groep Rapporten op het tabblad Maken .
Klik in het menu Bestand op Opslaan.
Notitie
Klik in Access 2007 op Microsoft Office-knop en klik vervolgens op Opslaan.
Typ AccessColumnBuilder in het dialoogvenster Opslaan als en klik vervolgens op OK.
Sluit het rapport.
Selecteer Formulieren in het linkerdeelvenster.
Notitie
Sla in Access 2007 deze stap over.
Dubbelklik in het rechterdeelvenster op Formulier maken in de ontwerpweergave.
Notitie
Klik in Access 2007 op Formulierontwerp in de groep Formulieren op het tabblad Maken .
Voeg een opdrachtknop toe aan het formulier.
Notitie
Klik in Access 2007 op Knop om een knop toe te voegen aan het formulier in de groep Besturingselementen op het tabblad Ontwerpen .
Klik met de rechtermuisknop op de opdrachtknop, klik op Build-gebeurtenis, klik op Code builder in het dialoogvenster Opbouwfunctie kiezen en klik vervolgens op OK.
Voeg de volgende code toe aan de gebeurtenis OnClick van de opdrachtknop:
Dim txtNew As Access.TextBox
Dim labNew As Access.Label
Dim lngTop As Long
Dim lngLeft As Long
Dim lblCol As Long
Dim rpt As Report
Dim reportQuery As String
Dim rs As DAO.Recordset
Dim i As Integer
Dim prevColwidth As long
lngLeft = 0
lngTop = 0
' Open the report to design.
' To make changes in the number of columns that appear at run time.
DoCmd.OpenReport "AccessColumnBuilder", acViewDesign
Set rpt = Reports![AccessColumnBuilder]
' Change the number of columns required as per your requirement.
reportQuery = "SELECT FirstName, LastName FROM Employees"
' Open the recordset.
Set rs = CodeDb().OpenRecordset(reportQuery)
' Assign the query as a record source to report control.
rpt.RecordSource = reportQuery
' Set the value to zero so that the left margin is initialized.
prevColwidth = 0
lblCol = 0
' Print the page header for the report.
For i = 0 To rs.Fields.Count - 1
Set labNew = CreateReportControl(rpt.Name, acLabel, acPageHeader, _
, rs.Fields(i).Name, lblcol, , , lngTop)
labNew.SizeToFit
lblCol = lblCol + 600 + labNew.Width
Next
' Create the column depending on the number of fields selected in reportQuery.
' Assign the column value to new created column.
For i = 0 To rs.Fields.Count - 1
' Create new text box control and size to fit data.
Set txtNew = CreateReportControl(rpt.Name, acTextBox, _
acDetail, , , lngLeft + 15 + prevColwidth, lngTop)
txtNew.SizeToFit
txtNew.ControlSource = rs(i).Name
' Modify the left margin depending on the number of columns
' and the size of each column.
prevColwidth = prevColwidth + txtNew.width
Next
'To save the modification to the report, uncomment the following line of code:
'DoCmd.Save
' View the generated report.
DoCmd.OpenReport "AccessColumnBuilder", acViewPreview
' This opens the report in preview.
Sla het formulier op en voer het vervolgens uit.
Als u een voorbeeld van het rapport wilt bekijken, klikt u op de opdrachtknop die u in stap 10 hebt toegevoegd.
De volgende records worden weergegeven op de eerste pagina:
First NameLast Name
NancyDavolio
MargaretPeacock
...............
Het rapport bevat de kolom Firstname en de kolom Lastname van de tabel Werknemers . U kunt het rapport opslaan of de vereiste wijzigingen aanbrengen in de query en vervolgens het rapport uitvoeren.
Methode 2: Kolommen toevoegen aan het rapport tijdens runtime door de eigenschap Visible van de bestaande kolom in te stellen
In dit voorbeeld ziet u hoe u een nieuwe kolom in een rapport kunt weergeven door de eigenschap Visible van het besturingselement te bewerken.
Het rapport bevat vier kolommen. De Visible
eigenschap van de eerste drie kolommen is ingesteld op ja. De Visible
eigenschap van de vierde kolom is ingesteld op nee. Bij een pagina-einde wordt de Visible
eigenschap van de vierde kolom ingesteld op ja wanneer de kolom wordt weergegeven.
Start Access.
Klik in het menu Help op Voorbeelddatabases en klik vervolgens op Voorbeelddatabase northwind. Sluit het formulier Hoofdschakelbord wanneer dit wordt weergegeven.
Notitie
Klik in Access 2007 op Voorbeeld in het deelvenster Sjablooncategorieën , klik op Northwind 2007 en klik vervolgens op Downloaden.
Voer de volgende stappen uit om een rapport met de naam Rapport1 te maken dat is gebaseerd op de tabel Producten :
Klik in het venster Database op Rapporten en klik vervolgens op Nieuw.
Notitie
Klik in Access 2007 op Wizard Rapport in de groep Rapporten op het tabblad Maken .
Klik in het dialoogvenster Nieuw rapport op Ontwerpweergave, selecteer Producten en klik vervolgens op OK.
Voeg de volgende tekstvakken toe aan de sectie Detail van het rapport. De tekstvakken uitlijnen.
Plaats de bijbehorende labels in de sectie Paginakoptekst van het rapport. Lijn de labels uit.
Report: Report1
--------------------------
Caption: TestReport
ControlSource: Products
Label:
Name: ProductName_label
Text Box:
Name: ProductName
ControlSource: ProductName
Label:
Name: UnitPrice_label
Text Box:
Name: UnitPrice
ControlSource: UnitPrice
Label:
Name: UnitsInStock_label
Text Box:
Name: UnitsInStock
ControlSource: UnitsInStock
Label:
Name: TotalPrice_label
Visible: No
Text Box:
Name: TotalPrice
ControlSource: =[UnitPrice] * [UnitsInStock]
Visible: No
Voeg een besturingselement tekstvak met de volgende eigenschappen toe aan de sectie Detail . Plaats het tekstvak direct boven het besturingselement ProductName .
Dit besturingselement fungeert als een teller voor het aantal records in het rapport.
Text Box:
-----------------------
Name: Counter
ControlSource: =1
Visible: No
RunningSum: Over All
Klik in de werkset op Pagina-einde.
Notitie
Klik in Access 2007 op Pagina-einde toevoegen of verwijderen in de groep Besturingselementen op het tabblad Ontwerpen .
Voeg een besturingselement voor pagina-einde toe aan de linkerbenedenhoek van de sectie Detail . Plaats het besturingselement pagina-einde direct onder het besturingselement ProductName . Stel de eigenschap Name in op PageBreak.
Stel in de sectie Detail de eigenschap OnFormat in op de volgende gebeurtenisprocedure:
If Me![Counter] Mod 2 = 0 Then Me![PageBreak].Visible = True _
Else Me![PageBreak].Visible = False
Als u de lege ruimte in het rapport wilt verkleinen, plaatst u de aanwijzer tussen de onderkant van de sectie Detail en de paginavoettekst en sleept u omhoog.
Stel in de sectie Paginavoettekst de eigenschap OnPrint in op de volgende gebeurtenisprocedure:
If Me![PageBreak].Visible = True Then
Me![TotalPrice].Visible = True
Me![TotalPrice_label].Visible = True
Else
Me![TotalPrice].Visible = False
Me![TotalPrice_label].Visible = False
End If
Wanneer PageBreak optreedt, wordt de kolom TotalPrice weergegeven.
Bekijk een voorbeeld van het rapport. De volgende records worden weergegeven op de eerste pagina:
Product NameUnit PriceUnit in Stock
Cahi$18.0039
Chang$19.0017
Notitie
De eerste pagina van het rapport bevat drie kolommen.
De volgende records worden weergegeven op de tweede pagina:
Product NameUnit PriceUnit in StockTotal Amount
Aniseed Syrup $10.0013 130
Chef A... $22.00 53 1166
Notitie
Het pagina-einde vindt plaats na de eerste pagina. Daarom bevat de tweede pagina van het rapport vier kolommen.
Ga naar het volgende artikel voor meer informatie over het programmatisch maken van een Access-rapport:
Een eenvoudig rapport maken