まりふのひと

クロス集計クエリー レポートの作成ポイント

クロス集計すると、列が固定されないので、そのままレポートを作成すると、不具合が発生する可能性がある。そこで、Report_Open 時に、DAOでレコードソースを開いて、フィールド名を取得し、レポートのタイトルやコントロールのソースを変更する必要がある。以下は、今日、半日掛りで完成させたレポートの例。

Private Sub Report_Open(Cancel As Integer)
On Error GoTo Err_Report_Open
Dim mbTitle As String
Dim DBS As DAO.Database
Dim RST As DAO.Recordset
Dim i As Long
Dim strCriteria As String

    mbTitle = MYObjName & "/Report_Open"
    Set DBS = CurrentDb
    Set RST = DBS.OpenRecordset(Me.RecordSource)
    For i = 3 To RST.Fields.Count - 1
        strCriteria = "[年代分類CD]=" & CInt(RST.Fields(i).Name)
        With Me("lbl" & i)
            .Caption = DLookup("年代分類", "T_年代分類", strCriteria)
            .Visible = True
        End With
        Me("txt" & i).ControlSource = RST.Fields(i).Name
        Me("txt10" & i).ControlSource = "=Sum([" & RST.Fields(i).Name & "])"
        Me("txt20" & i).ControlSource = "=Sum([" & RST.Fields(i).Name & "])"
    Next
    
Exit_Report_Open:
    Set DBS = Nothing
    Exit Sub
    
Err_Report_Open:
    MsgBox Err.Number & "/" & Err.Description, vbCritical, mbTitle
    Resume Exit_Report_Open
End Sub

ヒントは、アクセス2002 VBAのアイデア箱/株式会社SCC