Så här skapar du programmatiskt en ny kolumn i en Access-rapport

Ursprungligt KB-nummer: 812719

Sammanfattning

Den här artikeln beskriver hur du programmässigt skapar en kolumn i en Access-rapport. Du kan dynamiskt lägga till kolumnen i rapporten med hjälp av metod 1 eller metod 2 som beskrivs i avsnittet Mer information.

Obs!

Exempelkoden i den här artikeln använder Microsoft Data Access-objekt. För att den här koden ska köras korrekt måste du referera till Microsoft DAO 3.6-objektbiblioteket. Det gör du genom att klicka på Referenserpå verktygsmenyn i Visual Basic-Editor och kontrollera att kryssrutan Objektbibliotek för Microsoft DAO 3.6 är markerad.

Metod 1: Lägg till kolumner i rapporten programmatiskt

Följande exempel visar hur du programmatiskt skapar en Access-rapport. Koden genererar en rapport som baseras på postkällans fråga. Den genererade rapporten visar kolumnen Förnamn och kolumnen Efternamn i tabellen Anställda i Northwind.mdb exempeldatabas.

  1. Starta åtkomst.

  2. hjälpmenyn klickar du på Exempeldatabaser och sedan på Northwind-exempeldatabas. Stäng formuläret Main Switchboard när det visas.

    Obs!

    I Access 2007 klickar du på Exempel i fönstret Mallkategorier , klickar på Northwind 2007 och klickar sedan på Ladda ned.

  3. Klicka på Rapporter i den vänstra rutan.

    Obs!

    Hoppa över det här steget i Access 2007.

  4. Dubbelklicka på Skapa rapport i designvyn i den högra rutan.

    Obs!

    I Access 2007 klickar du på Rapportdesign i gruppen Rapporter på fliken Skapa .

  5. Klicka på SparaArkiv-menyn.

    Obs!

    I Access 2007 klickar du på Microsoft Office-knappen och sedan på Spara.

  6. I dialogrutan Spara som skriver du AccessColumnBuilder och klickar sedan på OK.

  7. Stäng rapporten.

  8. I den vänstra rutan väljer du Formulär.

    Obs!

    Hoppa över det här steget i Access 2007.

  9. Dubbelklicka på Skapa formulär i designvyn i den högra rutan.

    Obs!

    I Access 2007 klickar du på Formulärdesign i gruppen Formulär på fliken Skapa .

  10. Lägg till en kommandoknapp i formuläret.

    Obs!

    I Access 2007 klickar du på Knapp för att lägga till en knapp i formuläret i gruppen Kontroller på fliken Design .

  11. Högerklicka på kommandoknappen, klicka på Skapa händelse, klicka på Code Builder i dialogrutan Välj builder och klicka sedan på OK.

  12. Lägg till koden som följer i OnClick-händelsen för kommandoknappen:

    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. Spara och kör sedan formuläret.

  14. Om du vill förhandsgranska rapporten klickar du på kommandoknappen som du lade till i steg 10.

    Följande poster visas på den första sidan:

    First NameLast Name
    
    NancyDavolio
    
    MargaretPeacock
    
    ...............
    

    Rapporten innehåller kolumnen Förnamn och kolumnen Efternamn i tabellen Anställda . Du kan antingen spara rapporten eller göra nödvändiga ändringar i frågan och sedan köra rapporten.

Metod 2: Lägg till kolumner i rapporten vid körning genom att ange den befintliga kolumnens synliga egenskap

Det här exemplet visar hur du visar en ny kolumn i en rapport genom att ändra egenskapen Visible för kontrollen.

Rapporten innehåller fyra kolumner. Egenskapen Visible för de tre första kolumnerna är inställd på ja. Egenskapen Visible för den fjärde kolumnen är inställd på nej. Vid en sidbrytning Visible anges egenskapen för den fjärde kolumnen till ja när kolumnen visas.

  1. Starta åtkomst.

  2. hjälpmenyn klickar du på Exempeldatabaser och sedan på Northwind-exempeldatabas. Stäng formuläret Main Switchboard när det visas.

    Obs!

    I Access 2007 klickar du på Exempel i fönstret Mallkategorier , klickar på Northwind 2007 och klickar sedan på Ladda ned.

  3. Följ dessa steg om du vill skapa en rapport med namnet Report1 och baseras på tabellen Produkter :

    1. I fönstret Databas klickar du på Rapporter och sedan på Nytt.

      Obs!

      I Access 2007 klickar du på Rapportguiden i gruppen Rapporter på fliken Skapa .

    2. I dialogrutan Ny rapport klickar du på Designvy, väljer Produkter och klickar sedan på OK.

    3. Lägg till följande textrutor i avsnittet Information i rapporten. Justera textrutorna.

    4. Placera motsvarande etiketter i avsnittet Sidhuvud i rapporten. Justera etiketterna.

      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. Lägg till en textrutekontroll med följande egenskaper i avsnittet Information . Placera textrutan direkt ovanför kontrollen ProductName .

    Den här kontrollen fungerar som en räknare för antalet poster i rapporten.

    Text Box:
    -----------------------
    Name: Counter
    ControlSource: =1
    Visible: No
    RunningSum: Over All
    
  5. Klicka på Sidbrytning i verktygslådan.

    Obs!

    I Access 2007 klickar du på Lägg till eller Ta bort sidbrytning i gruppen Kontroller på fliken Design .

  6. Lägg till en sidbrytningskontroll i det nedre vänstra hörnet i avsnittet Information . Placera sidbrytningskontrollen direkt under ProductName-kontrollen . Ange egenskapen Namn till PageBreak.

  7. I avsnittet Information anger du egenskapen OnFormat till följande händelseprocedur:

    If Me![Counter] Mod 2 = 0 Then Me![PageBreak].Visible = True _
    Else Me![PageBreak].Visible = False
    
  8. Om du vill minska det tomma utrymmet i rapporten placerar du pekaren längst ned i avsnittet Information och sidfoten och drar sedan uppåt.

  9. I avsnittet Sidfot anger du egenskapen OnPrint till den händelseprocedur som följer:

    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
    

    När PageBreak inträffar visas kolumnen TotalPrice .

  10. Förhandsgranska rapporten. Följande poster visas på den första sidan:

    Product NameUnit PriceUnit in Stock
    
    Cahi$18.0039
    
    Chang$19.0017
    

    Obs!

    Den första sidan i rapporten innehåller tre kolumner.

    Följande poster visas på den andra sidan:

    Product NameUnit PriceUnit in StockTotal Amount
    
    Aniseed Syrup $10.0013    130
    
    Chef A...    $22.00 53    1166
    

    Obs!

    Sidbrytningen inträffar efter den första sidan. Därför innehåller den andra sidan i rapporten fyra kolumner.

Referenser

Mer information om hur du programmatiskt skapar en Access-rapport finns i följande artikel:

Skapa en enkel rapport