Microsoft Access 掲示板

目次(索引)作成 / 13

39 コメント
views
5 フォロー
13
hiroton 2021/05/13 (木) 14:46:46 修正 d3c7a@f966d

というわけで、ちゃんと使いやすいデータにして対応する例
Dictionary オブジェクトを使って目次データを整理するようにします

Option Compare Database
Option Explicit

Dim dicIndex As Object

Private Sub Report_Open(Cancel As Integer)
    Set dicIndex = CreateObject("Scripting.Dictionary")
End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
    Dim indexString As String
    indexString = Left(Me!薬品名 & String(12, "・"), 12) & Format(Me.Page, "@@@")

    With dicIndex
        If .Exists(Me!薬品名のフリガナ.Value) Then
            .Item(Me!薬品名のフリガナ.Value) = indexString
        Else
            .Add Me!薬品名のフリガナ.Value, indexString
        End If
    End With
End Sub

Private Sub レポートフッター_Format(Cancel As Integer, FormatCount As Integer)
    Static isExecuted As Boolean
    Dim arr
    Dim s
    Const colCount = 3  '1ページの段数
    Const rowCount = 30 '1ページの行数
    Dim CNT As Long
    Dim colName As String

    If Not isExecuted Then
    
        '並び替え用配列の準備
        arr = dicIndex.Keys
        '並び替え用配列を出力順に並び替え
        Call ArrayListSort(arr)
    
        '出力順にデータを取り出して段組みに振り分ける
        CNT = 0
        For Each s In arr
            colName = "txt目次" & CNT \ rowCount Mod colCount
            Me(colName) = Me(colName) & dicIndex.Item(s) & vbCrLf
            CNT = CNT + 1
        Next

        isExecuted = True
    End If
End Sub

Dictionary オブジェクトを使うには事前準備が必要なのでレポートの開く時イベントに処理を追加しています。

Dictionary オブジェクトの仕様上「薬品名のフリガナ」に重複データがあると最後の「薬品名」のみ目次に反映されます

通報 ...