レポートに詳しくない人のために種明かしをしておきます。詳細セクションの高さを広げて印刷すると、以下のようになります。データの入った、氏名と各科目成績のテキストボックス、多数の縦の直線および横の直線(初期値は点線)から詳細セクションができています。
通常はレコードがなければ詳細セクションの印刷は終了してしまいますが、レコードが無くても詳細セクションを印刷するように制御します。レコード有無の判断を制御するので、直線は最大行まで全て印刷します。つまり、何もしなくてよいです。
問題はテキストボックスです。今回の場合、科目数が25個なのでその部分の制御だけでも同じ処理を繰り返し記述しなければなりません。
VisualBasicはコントロール配列を使うことができるので、同じコントロール名を付けると自動的に配列として扱われますが、VBAにはコントロール配列がありません。しかし、次のようにすると配列のように扱うことができます。同じ記述を繰り返さなくて済みます。
最初にそのコードを示しておきます。
今回、各科目のデータソースはkn1~kn25でした。レポートのテキストボックスの名前はk1~k25としてあります。
1 2 3 4 5 |
‘—– テキストボックスの可視プロパティを設定する例 —– Dim i As Integer For i = 1 To 25 Me.Controls(“k” & i).Visible = True Next |
次に、5名(5行)毎に横罫線を実線にするためのコードも簡単ですから、示しておきます。
良く使われる手法です。割り算した余りが0(割り切れる)というやり方のMod演算子です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) Dim ln As Integer i = i + 1 ‘行数をカウントする変数、別に定義しておく ln = i Mod 5 If ln = 0 Then line1.BorderStyle = 1 ‘実線 Else line1.BorderStyle = 4 ’点線 End If End Sub |
これで、準備ができました。続きは次回とします。