• 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
    

説明がわからないなどありましたらお問い合わせでお知らせください。

ここに掲載された情報を使用したことによって発生した、いかなる損害に対しても
管理者である雅は一切責任を負いません。