Jak programowo utworzyć nową kolumnę w raporcie programu Access

Oryginalny numer KB: 812719

Podsumowanie

W tym artykule opisano sposób programowego tworzenia kolumny w raporcie programu Access. Kolumnę można dynamicznie dodać do raportu przy użyciu metody 1 lub metody 2 opisanej w sekcji "Więcej informacji".

Uwaga

Przykładowy kod w tym artykule używa obiektów programu Microsoft Data Access. Aby ten kod działał prawidłowo, należy odwołać się do biblioteki obiektów microsoft DAO 3.6. W tym celu kliknij pozycję Odwołania w menu Narzędzia w Redaktor Visual Basic i upewnij się, że zaznaczono pole wyboru Biblioteka obiektów microsoft DAO 3.6.

Metoda 1. Programowe dodawanie kolumn do raportu

W poniższym przykładzie pokazano, jak programowo utworzyć raport programu Access. Kod generuje raport oparty na zapytaniu źródła rekordów. Wygenerowany raport zawiera kolumnę Firstname i kolumnę Lastname tabeli Employees przykładowej bazy danych Northwind.mdb.

  1. Uruchom dostęp.

  2. W menu Pomoc kliknij pozycję Przykładowe bazy danych, a następnie kliknij pozycję Przykładowa baza danych Northwind. Zamknij formularz Main Switchboard (Główny panel przełączania ), gdy zostanie wyświetlony.

    Uwaga

    W programie Access 2007 kliknij pozycję Przykład w okienku Kategorie szablonów , kliknij pozycję Northwind 2007, a następnie kliknij pozycję Pobierz.

  3. W okienku po lewej stronie kliknij pozycję Raporty.

    Uwaga

    W programie Access 2007 pomiń ten krok.

  4. W okienku po prawej stronie kliknij dwukrotnie pozycję Utwórz raport w widoku projektu.

    Uwaga

    W programie Access 2007 kliknij pozycję Projekt raportu w grupie Raporty na karcie Tworzenie .

  5. W menu Plik kliknij pozycję Zapisz.

    Uwaga

    W programie Access 2007 kliknij przycisk Microsoft Office, a następnie kliknij przycisk Zapisz.

  6. W oknie dialogowym Zapisz jako wpisz AccessColumnBuilder, a następnie kliknij przycisk OK.

  7. Zamknij raport.

  8. W okienku po lewej stronie wybierz pozycję Formularze.

    Uwaga

    W programie Access 2007 pomiń ten krok.

  9. W okienku po prawej stronie kliknij dwukrotnie pozycję Utwórz formularz w widoku projektu.

    Uwaga

    W programie Access 2007 kliknij pozycję Projekt formularza w grupie Formularze na karcie Tworzenie .

  10. Dodaj przycisk polecenia do formularza.

    Uwaga

    W programie Access 2007 kliknij przycisk , aby dodać przycisk do formularza w grupie Kontrolki na karcie Projekt .

  11. Kliknij prawym przyciskiem myszy przycisk polecenia, kliknij pozycję Build Event (Zdarzenie kompilacji), kliknij pozycję Konstruktor kodu w oknie dialogowym Wybieranie konstruktora , a następnie kliknij przycisk OK.

  12. Dodaj następujący kod do zdarzenia OnClick przycisku polecenia:

    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. Zapisz, a następnie uruchom formularz.

  14. Aby wyświetlić podgląd raportu, kliknij przycisk polecenia dodany w kroku 10.

    Następujące rekordy są wyświetlane na pierwszej stronie:

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

    Raport zawiera kolumnę Firstname i kolumnę Lastname tabeli Employees . Możesz zapisać raport lub wprowadzić wymagane zmiany w zapytaniu, a następnie uruchomić raport.

Metoda 2. Dodawanie kolumn do raportu w czasie wykonywania przez ustawienie widocznej właściwości istniejącej kolumny

W tym przykładzie pokazano, jak wyświetlić nową kolumnę w raporcie, manipulując właściwością Visible kontrolki.

Raport zawiera cztery kolumny. Właściwość Visible pierwszych trzech kolumn jest ustawiona na wartość tak. Właściwość Visible czwartej kolumny jest ustawiona na wartość nie. W przypadku podziału Visible strony właściwość czwartej kolumny jest ustawiona na wartość tak , gdy zostanie wyświetlona kolumna.

  1. Uruchom dostęp.

  2. W menu Pomoc kliknij pozycję Przykładowe bazy danych, a następnie kliknij pozycję Przykładowa baza danych Northwind. Zamknij formularz Main Switchboard (Główny panel przełączania ), gdy zostanie wyświetlony.

    Uwaga

    W programie Access 2007 kliknij pozycję Przykład w okienku Kategorie szablonów , kliknij pozycję Northwind 2007, a następnie kliknij pozycję Pobierz.

  3. Aby utworzyć raport o nazwie Report1 i jest oparty na tabeli Products , wykonaj następujące kroki:

    1. W oknie Baza danych kliknij pozycję Raporty , a następnie kliknij pozycję Nowy.

      Uwaga

      W programie Access 2007 kliknij pozycję Kreator raportów w grupie Raporty na karcie Tworzenie .

    2. W oknie dialogowym Nowy raport kliknij pozycję Widok projektu, wybierz pozycję Produkty, a następnie kliknij przycisk OK.

    3. Dodaj następujące pola tekstowe do sekcji Szczegóły raportu. Wyrównaj pola tekstowe.

    4. Umieść odpowiednie etykiety w sekcji Nagłówek strony raportu. Wyrównaj etykiety.

      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. Dodaj kontrolkę pola tekstowego z następującymi właściwościami do sekcji Szczegóły . Umieść pole tekstowe bezpośrednio nad kontrolką ProductName .

    Ta kontrolka działa jako licznik liczby rekordów w raporcie.

    Text Box:
    -----------------------
    Name: Counter
    ControlSource: =1
    Visible: No
    RunningSum: Over All
    
  5. W przyborniku kliknij pozycję Podział strony.

    Uwaga

    W programie Access 2007 kliknij pozycję Dodaj lub usuń podział strony w grupie Kontrolki na karcie Projekt .

  6. Dodaj kontrolkę podziału strony do lewego dolnego rogu sekcji Szczegóły . Umieść kontrolkę podziału strony bezpośrednio pod kontrolką ProductName . Ustaw właściwość Nazwa na PageBreak.

  7. W sekcji Szczegóły ustaw właściwość OnFormat na następującą procedurę zdarzenia:

    If Me![Counter] Mod 2 = 0 Then Me![PageBreak].Visible = True _
    Else Me![PageBreak].Visible = False
    
  8. Aby zmniejszyć puste miejsce w raporcie, umieść wskaźnik między dolną częścią sekcji Szczegóły i stopki strony , a następnie przeciągnij w górę.

  9. W sekcji Page Footer (Stopka strony ) ustaw właściwość OnPrint na następującą procedurę zdarzenia:

    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
    

    Po wystąpieniu funkcji PageBreak zostanie wyświetlona kolumna TotalPrice .

  10. Wyświetl podgląd raportu. Następujące rekordy są wyświetlane na pierwszej stronie:

    Product NameUnit PriceUnit in Stock
    
    Cahi$18.0039
    
    Chang$19.0017
    

    Uwaga

    Pierwsza strona raportu zawiera trzy kolumny.

    Następujące rekordy są wyświetlane na drugiej stronie:

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

    Uwaga

    Podział strony występuje po pierwszej stronie. W związku z tym druga strona raportu zawiera cztery kolumny.

Informacje

Aby uzyskać więcej informacji na temat programowego tworzenia raportu programu Access, odwiedź następujący artykuł:

Tworzenie prostego raportu