Microsoft Access 掲示板

メインフォームにサブフォームの合計値を表示させたい

4 コメント
views
4 フォロー

お世話になります。

メインフォームに、テキストボックスを作り

=Sum([sbf_Treatment].[Forms]![Qty])

と設定しましたが#Errorとなります。
サブフォーム内に=Sum([Qty])の場合は正常に表示されますし、サブフォームコントロール名も間違ってはいません。
どこが違うのでしょうか。
角括弧は自動で作られてしまって、消せませんでした。

nokonoko
作成: 2021/04/14 (水) 10:46:27
通報 ...
1

Sum関数は、自身のフォームのレコードソースのフィールドを対象とします。別フォームのフィールドは使用できません。サブフォームでも同様です。

サブフォーム内の =Sum([Qty]) のテキストボックスを参照するようにしてください。このテキストボックス名を SumQty として、メインフォームのテキストボックスのコントロールソースを下記のように設定します。

=[sbf_Treatment].[Forms]![SumQty]

サブフォーム内の =Sum([Qty]) を表示させたくない場合、可視を「いいえ」にしておけばいいでしょう。

2
nokonoko 2021/04/14 (水) 11:04:13 653a6@54883

ご回答ありがとうございます

このサブフォームは2つのメインフォームで使用する汎用フォームとして設定しましたが、
今回問題にしているメインフォーム(フォームA)でフィルタリングがあるため、
別のメインフォーム(フォームB)を開くときに、フォームAのテキストボックスに関する
パラメータ入力ダイアログを要求されて困っています。
そのため、合計はサブフォームではなくメインフォームで計算しようと考えました。
(できない理由は理解しました)

サブフォームの使いまわしをやめるしかないでしょうか?

3

今回問題にしているメインフォーム(フォームA)でフィルタリングがあるため、

サブフォームのレコードソースのクエリ、または、コントロールソースで、フォームAを参照しているということでしょうか。

もし、使いわわしたいなら、この参照はやめて別の方法を考えることになるでしょう。
下記のようないくつかの方法が考えられます。状況に応じて選択してください。

  • メインフォームの「リンク親フィールド」「リンク子フィールド」の設定でフィルタリングする。

  • 親フォームのVBAでFilterプロパティを設定してフィルタリングする。

  • サブフォームからの参照を絶対参照ではなく相対参照にする。(メインフォームが変わっても条件が同じになる場合)
    [Parent]![コントロール名] で親フォームのコントロールを相対的に参照できます。

4
nokonoko 2021/04/14 (水) 13:14:58 653a6@54883

使いまわし早めて、それぞれ別のサブフォームとして独立させることとします。
ありがとうございました