- ベストアンサー
Accessのサブフォーム非表示の条件設定について
- Access初心者が住所録アプリで家族のデータを表示するサブフォームを非表示にする条件設定について相談です。
- 具体的には、サブフォーム内の家族の人数をカウントし、その結果に応じてメインフォームに配置したテキストボックスを非表示にする方法がわかりません。
- 現在のコードではうまくいかず、正しい記述方法が分からないので、どのように修正すればいいか教えてください。
- みんなの回答 (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行もわざわざ書かないでしょう。 もちろん、スタイルは一貫した方が宜しいのでどちらが正解はないです。
その他の回答 (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。 という回答ですよ。
お礼
すみません、よく理解できなくて。 ということは、最初に私が質問した記述でよいと言うことでしょうか?
<住所録主表> 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の筈です。 ※ただし、新規追加の時の対策は必要かと・・・。
お礼
ありがとうございました。 サブフォーム.Visible = False ではだめなんですね。 早速、教えて頂いた様にやってみます。
お礼
ありがとうございました。 すみません、しばらく他の仕事で手一杯だったのでこちらを見るのが 遅くなってしまいました。 そうですね。いろいろ改良の余地がありました。 教えて頂いたとおりでうまくいきました。 ありがとうございました。