レポートでデータがなくても空行を出力したい
-
Q.
レポートの明細行で、データが1件しかなくても空の行を9件出力して合計10行にしたいのですがどうすればよいでしょうか?
-
A.
空のデータを用意する方法とNextRecordプロパティとを使用する方法があります。
-
解説
空データを用意する方法はSQLでINSERTを実行する方法やOpenRecordset後にAddNew – Updateを行います。
ただし、ソートするためのキーが必要になります。キーが存在しないと空行がどの位置に入るか保障されません。For i = DCount("*", "テーブル名") + 1 To 20 DoCmd.RunSQL "INSERT INTO テーブル名 ( ID ) VALUES(i);" Next i
NextRecordを使用する方法は、改ページコントロールも同時に使用します。
NextRecordプロパティは次に表示されるレコードは現在のレコードを再度表示するか、もしくは通常通り次のレコードを表示するかを設定するプロパティです。この動作を使い空行を表示します。(例えば、3件のデータが存在している場合に10行表示させたい場合は3件目のデータを表示した後でNextRecord = Falseにし10行目まで繰り返し表示します)
NextRecord = Falseに設定したとき、明細の項目を表示したままにしておくと重複して表示されますのでコントロールのVisibleプロパティをFalseに設定します。
グループヘッダーを使用する場合は改ページ条件をカレントセクションの前とします。
改ページコントロールは、レポートの詳細セクションに作成します。
作成する場所は詳細セクションの下側です。
(詳細セクションの高さが1cmだとすると改ページコントロールの上位置は1cmにします)要点は
- グループヘッダーを使用する場合は改ページ条件をカレントセクションの前とする
- 改ページコントロールの配置場所は詳細セクションの下側にする
です。
宣言セクション
Private LineCounter As Integer Private MaxDataCount As Long
ヘッダー部のフォーマット時イベント(レポートヘッダー・グループヘッダー等)
LineCounter = 0 'グループヘッダーの場合は初期化が必要 MaxDataCount = Dcount("*", "テーブル名")
詳細部のフォーマット時イベント
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) Dim VisibleFlag As Boolean Dim FieldName As String VisibleFlag = False LineCounter = LineCounter + 1 If LineCounter Mod 20 = 0 Then '「20」は改ページする行数です。 '改ページしたい行数を詳細セクションのタブプロパティに入れておくとこのように使えます。 ' If LineCounter Mod CByte(Me.詳細.Tag) = 0 Then If LineCounter <= MaxDataCount Then Me![改ページ].Visible = True GoSub 詳細_Format_明細表示 Else GoSub 詳細_Format_明細項目表示 End If Else Me![改ページ].Visible = False If LineCounter < MaxDataCount Then Me.NextRecord = True GoSub 詳細_Format_明細表示 ElseIf LineCounter = MaxDataCount Then Me.NextRecord = False GoSub 詳細_Format_明細表示 Else Me.NextRecord = False GoSub 詳細_Format_明細項目表示 End If End If Exit Sub 詳細_Format_明細表示: VisibleFlag = True GoSub 詳細_Format_明細項目表示 '何か特殊な処理を入れたい場合はここに入れる Return 詳細_Format_明細項目表示: Me![詳細にあるコントロール].Visible = VisibleFlag '詳細にあって表示したいコントロールすべてを同様に書く Return End Sub
スポンサーリンク
スポンサーリンク
説明がわからないなどありましたらお問い合わせでお知らせください。
ここに掲載された情報を使用したことによって発生した、いかなる損害に対しても
管理者である雅は一切責任を負いません。