というわけで、ちゃんと使いやすいデータにして対応する例
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 オブジェクトの仕様上「薬品名のフリガナ」に重複データがあると最後の「薬品名」のみ目次に反映されます
通報 ...