|
次のコードを、サンプルを作って試してみました。
>Dim SIRE As Long,ZEI As Long,GOKEI As Long
>Function funcKEISAN()
> SIRE = SIRE + Me.SIRE
> ZEI = ZEI + Me.ZEI
> GOKEI = GOKEI + Me.GOKEI
>End Function
>
>Private Sub ページフッターセクション
> Me.仕入計 = SIRE
> Me.税計 = ZEI
> Me.合計計 = GOKEI
>End Sub
その結果、
>10ページ目だけを印刷した場合に10ページの部分のみの数値が計算されてしまいます。
という事態には至らず、ページフッタの合計を表示するテキストボックスには、
1ページ目のレコードの合計額と10ページ目の合計額の併せた数値が表示されました。
maiu さんにおける設定とは異なっているはずですので、
当方のサンプルの概要を記載しておきます。
なお、オブジェクトの命名方法に統一性がなく、いつもならそんな命名方法はしませんが、
サンプルなので、その点は御容赦。
テーブル構成
テーブル名 T仕入れ
フィールド
ID オートナンバー 主キー
取引先 テキスト型
仕入額 長整数型
レポート
レポート名 R仕入れ_関数実験
レコードソース T仕入れ
配置したコントロール
txtID (詳細セクションに配置。コントロールソースは「ID」フィールド)
txt取引先 (詳細セクションに配置。コントロールソースは「取引先」フィールド)
txt仕入額 (詳細セクションに配置。コントロールソースは「仕入額」フィールド)
txt関数 (詳細セクションに配置。コントロールソースは「=funcKEISAN()」)
txtPageSum (ページフッタに配置。非連結コントロール。仕入額のそのページまでの合計を表示)
標準モジュール
Dim lngSiire AS Long ’パブリック変数
Function funcKEISAN() AS Long
lngSiire = lngSiire + Reports!R仕入れ_関数実験!txt仕入額
Debug.Print "ID:" & Reports!R仕入れ_関数実験!txtID.Value
funcKEISAN = 9
End Function
Sub SrPageFooterSection()
Reports!R仕入れ_クエリ実験!txtPageSum.Value = lngSiire
End Sub
「R仕入れ_関数実験」のモジュール
Private Sub ページフッターセクション_Print(Cancel As Integer, PrintCount As Integer)
Call SrPageFooterSection
Debug.Print "PageFooterSection_Printイベント,Page=" & Me.Page
End Sub
なお、上記における「Debug.Print」のコードですが、
「funcKEISAN」プロシージャや「ページフッターセクション_Print」プロシージャの
挙動を確認するためのコードです。
当該ページまでの仕入額の合計表示には全く関係のないコードです。
以上の構成の下で、
まず、R仕入れ_関数実験を開きます。レポートは全4ページからなっています。
次に、アクセスのメニューの印刷コマンドを選択し、3ページ目だけを印刷します。
すると、3ページ目のtxtPageSumには、
1ページ目のレコードの仕入額の合計と3ページ目の仕入額の合計を併せた額が表示されました。
冒頭のコードについては、私の前レスでは、
> というのは、ページフッタが印刷される時点において、
>変数SIRE等の値が、当該ページにおける最終レコードまでの仕入額等の合計額となっている
>保証がないからです。
> なので、これらのプロシージャを使って、仕入額等の合計を出すのは不安です。
と書きましたが、
実験の結果、冒頭のコードでも、実用的にはいけそうだなと思いました。
しかし、これは経験則に過ぎず、理論的なバックボーンを持ちません。
つまり、txt関数のコントロールソースに設定した「=funcKEISAN()」が
どのタイミングで実行されるのか、必ずしもはっきりしません。
そのため、不安払拭には至りません。
|
|