• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESSで条件によってサブフォームを非表示に)

Accessのサブフォーム非表示の条件設定について

このQ&Aのポイント
  • Access初心者が住所録アプリで家族のデータを表示するサブフォームを非表示にする条件設定について相談です。
  • 具体的には、サブフォーム内の家族の人数をカウントし、その結果に応じてメインフォームに配置したテキストボックスを非表示にする方法がわかりません。
  • 現在のコードではうまくいかず、正しい記述方法が分からないので、どのように修正すればいいか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.3

ANo.1 では、鈴木さんには家族がいて中村さんにはいませんよね。 このことは、それぞれのレコードが表示された時にしか判りません。 フォームをオープンした時に判るのは最初のレコードだけ。 ですから、<それぞれのレコードが表示された時=Form_Current()>でサブフォームを操作。 2、Form_Current() に記述すればOK。 と補足した理由です。 ところで、サブフォームで計算してメインに表示する必要はないですよね。 こういうやり方は、原則としてしない方がいいです。 カーソルが行き来する羽目になります。 (結果的に、今回は、問題点が表面化していないだけ!) Private Sub Form_Current()   Me.家族数 = DBCount("*", "住所録従表", "世帯主_ID=" & Me.ID) End Sub これで、事足りる訳ですから・・・。 >最初に私が質問した記述でよいと言うことでしょうか? If Me!カウント = 0 Then   サブフォーム.Visible = False Else   サブフォーム.Visible = True End If と書くも、 サブフォーム.Visible = Me.カウント と書くも同じ。 ならば、通常は、4行もわざわざ書かないでしょう。 もちろん、スタイルは一貫した方が宜しいのでどちらが正解はないです。

yjposhiete
質問者

お礼

ありがとうございました。 すみません、しばらく他の仕事で手一杯だったのでこちらを見るのが 遅くなってしまいました。 そうですね。いろいろ改良の余地がありました。 教えて頂いたとおりでうまくいきました。 ありがとうございました。

その他の回答 (2)

noname#140971
noname#140971
回答No.2

[イミディエイト] ? CBool(0) False ? CBool(1) True ? CBool(2) True ですから、 IF Me.家族数>0 Then   Me.住所録従表_サブフォーム.Visible = True Else   Me.住所録従表_サブフォーム.Visible = False End If と Me.住所録従表_サブフォーム.Visible = Me.家族数 とは同じこと。 1、メインフォームで集計し、 2、Form_Current() に記述すればOK。 という回答ですよ。

yjposhiete
質問者

お礼

すみません、よく理解できなくて。 ということは、最初に私が質問した記述でよいと言うことでしょうか?

noname#140971
noname#140971
回答No.1

<住所録主表> ID__世帯主 1___鈴木 一郎 2___中村 主水 <住所録従表> ID__世帯主_ID___続柄___氏名 1_______________1_______1___鈴木 恵美子 2_______________1_______2___鈴木 健太 世帯主=中村 主水氏の場合は、サブフォームを非表示にしたいとの質問。 Private Sub Form_Current()   Me.家族数 = DBCount("*", "住所録従表", "世帯主_ID=" & Me.ID)   Me.住所録従表_サブフォーム.Visible = Me.家族数 End Sub ここでは、自作の DBCount関数を利用しています。 もちろん、DCount関数を利用されても構いません。 (ただし、ちょっと、実行速度に問題があります) いずれにしろ、この2行でOKの筈です。 ※ただし、新規追加の時の対策は必要かと・・・。

yjposhiete
質問者

お礼

ありがとうございました。 サブフォーム.Visible = False ではだめなんですね。 早速、教えて頂いた様にやってみます。

関連するQ&A