Microsoft Access 掲示板

Accessレポート ページ切替につきまして

23 コメント
views
4 フォロー

◆やりたい事
レポートの詳細に記載される「数値」を参照し、
一定の「数値」に達するとページが切り替わるようにしたいです。

◆現在進めている方法
①レポート詳細にデザインツールから「改ページ」を追加しました。
②レポート詳細のプロパティを開きイベント「フォーマット時」のイベントプロシージャより、
 下記のコードを打ち込みました。

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
 
  If Me!累計 > 400000000 Then
  Me!改ページ.Visible() = True
  Else
    Me!改ページ.Visible = False
  End If
End Sub

◆結果
ページが切り替わらず、1行のみ表示されてしまいます。
表示内容を変更しても、条件通りに表示されません。

アクセス初心者
作成: 2023/05/22 (月) 18:45:30
通報 ...
1
  Me!改ページ.Visible() = True

の部分は転記ミスですか。

また、
「累計」テキストボックスのコントロールソース、集計実行の設定はどうなってますか。
累計値が表示されるような設定になっているのですか。

だとしたら、そのコードでは、累計が400000000を超えた時点で毎レコード改行されることになりますが、それは想定通りですか。

2
アクセス初心者 2023/05/23 (火) 10:05:43 fe6cd@a220e
Me!改ページ.Visible() = True

の部分は転記ミスしてました。
「累計」テキストボックスのコントロールソース・集計実行設定は以下となっています。
コントロールソース:クエリに記載されている「積載」データ
集計実行設定:「グループ全体」
累計値はレポートビューで確認できていますので、問題ないと思われます。

だとしたら、そのコードでは、累計が400000000を超えた時点で毎レコード改行されることになりますが、それは想定通りですか。
⇒可能であれば改ページした際に再度累計を実行したいと考えております。
 400000000を越えた時点で改ページを繰り返していくイメージが理想です。

3

⇒可能であれば改ページした際に再度累計を実行したいと考えております。

累計が 400000000 を超えた時点で、リセット(0に戻す)して、加算していくという意味でしょうか。

例えば、すべてのレコードが100000000として、

100000000
200000000
300000000
400000000
(改ページ)
100000000
200000000
300000000
400000000

というようなイメージですか。

もし、違うなら、上記のように具体例を出して説明してもらえますか。

4
アクセス初心者 2023/05/24 (水) 09:31:22 fe6cd@a220e

ありがとうございます。ご推察の通りです。

私の方でもネットで調べて作成してみますが、
こういったやり方があるなどございましたら、
ご教示いただけますと幸いです。よろしくお願いいたします。

5

改ページするタイミング(400000000を超えた時点)で累計をリセットするということですね。

「集計実行」の設定では、そのようなことは不可能ですので、累計はVBAで加算していって表示させるという方法にする必要があります。

Option Compare Database
Option Explicit
Private Ruikei As Long

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)
    Ruikei = 0
End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  If FormatCount = 1 Then Ruikei = Ruikei + Me!積載
  Me!累計 = Ruikei
  If Ruikei > 400000000 Then
    Me!改ページ.Visible = True
  Else
    Me!改ページ.Visible = False
  End If
End Sub

VBAで累計値を表示させる場合は、レポートのイベントの発生メカニズムを理解していないと、想定通りにならない場合がありますので注意が必要です。
説明すると長くなるので、下記のリンク先を参照して理解するようにしてください。

レポートのイベントの発生メカニズムの研究 - hatena chips

レポートのイベントの発生メカニズムの研究 その2 - hatena chips

6
アクセス初心者 2023/05/29 (月) 12:00:52 fe6cd@a220e

ご回答いただき、誠にありがとうございます。
大変申し訳ありません。私の理解不足でvbaによる累計算出ができませんでした。
以下のURLを参考に作成しましたが、うまくいきませんでした。

https://hatenachips.blog.fc2.com/blog-entry-443.html
https://okwave.jp/qa/q9018234.html

Q. グループ化させず累計を算出する場合、下記の〇△◇には何を入れるべきでしょうか。
If SetCumulativeTotal("数値","累計表示フィールド名","テーブル名","〇◎","△▽,◇◆") Then
     MsgBox "完了"
End If

7
hatena 2023/05/29 (月) 13:27:04 修正

もう、一度確認しますが、やりたいことは、
レポートで累計値を表示して、累計値が400000000を超えたら、改ページして、かつ、累計値をリセットして(0にして)、再度累計していく。
2023/05/23 (火) 20:59:21 の回答に例示したサンプルのようにしたい。
ということで間違いないですか。

だとしたら、
https://hatenachips.blog.fc2.com/blog-entry-443.html
で紹介した方法はテーブルのフィールドに累計値を出力する方法ですので、今回のご希望とは合致しないと思います。

2023/05/24 (水) 10:01:52 で紹介した方法でできるはずですので、確認してください。
ただし、グループ毎の累計ということは考慮してなかったのでグループヘッダーのフォーマット時で累計値の変数(Ruikei)をリセットするコードを追加してください。

Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)
    Ruikei = 0
End Sub
8
アクセス初心者 2023/05/29 (月) 16:03:42 fe6cd@a220e

レポートで累計値を表示して、累計値が400000000を超えたら、改ページして、かつ、累計値をリセットして(0にして)、再度累計していく。2023/05/23 (火) 20:59:21 の回答に例示したサンプルのようにしたい。ということで間違いないですか。
間違いございません。ご確認ありがとうございます。

2023/05/24のコードで実行したところ、下記の赤文字の部分で
「Meキーワードの使用方法が不正です」といったエラーが表示されました。
どうすれば解消できますでしょうか。

Option Compare Database
Option Explicit
Private Ruikei As Long

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)
    Ruikei = 0
End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  If FormatCount = 1 Then Ruikei = Ruikei + %%{fg:red}Me!積載%%
  Me!累計 = Ruikei
  If Ruikei > 400000000 Then
    Me!改ページ.Visible = True
  Else
    Me!改ページ.Visible = False
  End If
End Sub
9
アクセス初心者 2023/05/29 (月) 16:07:46 fe6cd@a220e >> 8

上記で正しく表示されなかったため、訂正します。
コチラでエラーが表示されます。
「Meキーワードの使用方法が不正です」

  If FormatCount = 1 Then Ruikei = Ruikei + Me!積載
10

Me!積載 でエラーになるということですね。

レポート上にテキストボックスを配置してコントロールソースを「積載」、可視を「いいえ」に設定してください。

レポートでVBAからフィールドを参照する場合、レポート上にそのフィールドを参照するコントロールが必要という仕様があります。

11
アクセス初心者 2023/05/29 (月) 17:15:21 fe6cd@a220e

迅速なご回答ありがとうございます。
試みてみましたが、依然としてエラーが表示されました。
何度もご対応いただき申し訳ございません。

Option Compare Database
Option Explicit
Private Ruikei As Long

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)
Ruikei = 0
End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  If FormatCount = 1 Then Ruikei = Ruikei + Me!積載
  Me!累計 = Ruikei
  If Ruikei > 400000000 Then
    Me!改ページ.Visible = True
  Else
    Me!改ページ.Visible = False
  End If
  
MsgBox "Finish"

End Sub
12

エラーメッセージと、どの行でエラーになっているか教えてください。

13
名前なし 2023/05/29 (月) 22:58:30 851bf@8fdc9

レポートを修正したら実行ができました!
しかし、オーバーフローしましたと最後にエラーが表示されます。
下記の行でエラーになっているようです。
 If FormatCount = 1 Then Ruikei = Ruikei + Me!積載

14

Private Ruikei As Long
の部分を
Private Ruikei As Currency
に変更してみてください。

15
アクセス初心者 2023/05/30 (火) 17:38:26 fe6cd@a220e

変更したところ、解決しました!
しかし、依然として1行ごとに改ページされております。

テーブルの「累計」の影響でしょうか。
現在、累計はテキストボックスで挿入しコントロールソースは無い状態です。

16
hatena 2023/05/31 (水) 08:34:40 修正

しかし、依然として1行ごとに改ページされております。

先頭レコードから、1行ごとに改ページされるのですか。
だとすると、現状のコードが原因ではないと思います。
まずは、改ページコントロールの「可視」を「いいえ」にして現状のVBAコードをすべてコメントアウトしてプレビューするとどうなりますか。

17
アクセス初心者 2023/06/05 (月) 13:44:17 fe6cd@a220e

改ページコントロールのプロパティを開いたところ、
「可視」項目がございませんでした。
プロパティから設定するのでしょうか。

18

確認したらプロパティには「可視」はないですね。
ならば、改ページコントロールを削除して試してみてください。

念のために、データベースファイルのコピーを作成して、そちらでいろいろ確認作業をしてください。

19
アクセス初心者 2023/06/05 (月) 17:18:43 fe6cd@a220e

ご確認ありがとうございます。
削除したところ、下記のコードで「改ページフィールドが見つかりません」と表示されました。

 Else
    Me!改ページ.Visible = False

20

原因を特定するために、まずはなるべくシンプルなもので確認するという手順をします。

まずは、コピーしたファイルでレポートのすべてのVBAを削除して、改ページコントロールも削除してどのような結果になるか確認してほしかったのです。

その状態で改ページされることがないのか、1行ごとに改ページされるのか、どちらでしょう。

21
アクセス初心者 2023/06/07 (水) 18:14:40 fe6cd@15915

確認しましたところ、
全てのVBA・改ページコントロールを削除したところ、
1ページ1行で表示されました。この場合、そもそものクエリに原因があるのでしょうか。

22

クエリが原因で改ページされることはありえません。
レポートの設定に原因があるのでしょう。

とりあえず思いつくのは、下記ぐらいです。
詳細セクションの「改ページ」プロパティが「しない」以外に設定されている。

上記について確認してみてください。

23
アクセス初心者 2023/06/14 (水) 14:04:10 fe6cd@a220e

hatenaさん
長らくありがとうございました。
無事に全ての問題を解決することができました。
ご教示いただき、誠にありがとうございました。