クロス集計すると、列が固定されないので、そのままレポートを作成すると、不具合が発生する可能性がある。そこで、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