Programmatisch een nieuwe kolom maken in een Access-rapport

Origineel KB-nummer: 812719

Samenvatting

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.

Opmerking

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.

  1. Start Access.

  2. Klik in het menu Help op Voorbeelddatabases en klik vervolgens op Voorbeelddatabase northwind. Sluit het formulier Hoofdschakelbord wanneer dit wordt weergegeven.

    Opmerking

    Klik in Access 2007 op Voorbeeld in het deelvenster Sjablooncategorieën , klik op Northwind 2007 en klik vervolgens op Downloaden.

  3. Klik in het linkerdeelvenster op Rapporten.

    Opmerking

    Sla in Access 2007 deze stap over.

  4. Dubbelklik in het rechterdeelvenster op Rapport maken in de ontwerpweergave.

    Opmerking

    Klik in Access 2007 op Rapportontwerp in de groep Rapporten op het tabblad Maken .

  5. Klik in het menu Bestand op Opslaan.

    Opmerking

    Klik in Access 2007 op Microsoft Office-knop en klik vervolgens op Opslaan.

  6. Typ AccessColumnBuilder in het dialoogvenster Opslaan als en klik vervolgens op OK.

  7. Sluit het rapport.

  8. Selecteer Formulieren in het linkerdeelvenster.

    Opmerking

    Sla in Access 2007 deze stap over.

  9. Dubbelklik in het rechterdeelvenster op Formulier maken in de ontwerpweergave.

    Opmerking

    Klik in Access 2007 op Formulierontwerp in de groep Formulieren op het tabblad Maken .

  10. Voeg een opdrachtknop toe aan het formulier.

    Opmerking

    Klik in Access 2007 op Knop om een knop toe te voegen aan het formulier in de groep Besturingselementen op het tabblad Ontwerpen .

  11. 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.

  12. 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.
    
  13. Sla het formulier op en voer het vervolgens uit.

  14. 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.

  1. Start Access.

  2. Klik in het menu Help op Voorbeelddatabases en klik vervolgens op Voorbeelddatabase northwind. Sluit het formulier Hoofdschakelbord wanneer dit wordt weergegeven.

    Opmerking

    Klik in Access 2007 op Voorbeeld in het deelvenster Sjablooncategorieën , klik op Northwind 2007 en klik vervolgens op Downloaden.

  3. Voer de volgende stappen uit om een rapport met de naam Rapport1 te maken dat is gebaseerd op de tabel Producten :

    1. Klik in het venster Database op Rapporten en klik vervolgens op Nieuw.

      Opmerking

      Klik in Access 2007 op Wizard Rapport in de groep Rapporten op het tabblad Maken .

    2. Klik in het dialoogvenster Nieuw rapport op Ontwerpweergave, selecteer Producten en klik vervolgens op OK.

    3. Voeg de volgende tekstvakken toe aan de sectie Detail van het rapport. De tekstvakken uitlijnen.

    4. 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
      
  4. 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
    
  5. Klik in de werkset op Pagina-einde.

    Opmerking

    Klik in Access 2007 op Pagina-einde toevoegen of verwijderen in de groep Besturingselementen op het tabblad Ontwerpen .

  6. 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.

  7. 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
    
  8. 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.

  9. 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.

  10. 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
    

    Opmerking

    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
    

    Opmerking

    Het pagina-einde vindt plaats na de eerste pagina. Daarom bevat de tweede pagina van het rapport vier kolommen.

Verwijzingen

Ga naar het volgende artikel voor meer informatie over het programmatisch maken van een Access-rapport:

Een eenvoudig rapport maken