プロが教えるわが家の防犯対策術!

Accessの初心者です。よろしくお願いします。

Accessで住所録を作っています。
メインフォームは主に本人のデータを表示し、サブフォームで家族の
データを表示するようにしました。
その時、家族がいない人についてはサブフォーム自体を表示しないようにしたいと思います。
そこで下記のようにしましたがうまくいきませんでした。

(1)サブフォーム内で家族の人数をカウントする。
(2)このカウント結果をメインフォームに表示する。(メインフォーム にテキストボックスを配置し、コントロールソースをサブフォームの 人数カウントにする。)

    ここまではうまくいきました。
(3)ここでメインフォームのイベントの「開くとき」に以下のように記 述しました。(メインフォームのテキストボックスにカウントという
 名前をつけました。)

Private Sub Form_Open(Cancel As Integer)
If Me!カウント = 0 Then
サブフォーム.Visible = False
Else
サブフォーム.Visible = True
End If
End Sub

この記述の仕方がまずいと思うのですが、どのようにすればよいか
分りません。よろしくお願いします。

A 回答 (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行もわざわざ書かないでしょう。
もちろん、スタイルは一貫した方が宜しいのでどちらが正解はないです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/30 12:58

[イミディエイト]


? 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。

という回答ですよ。
    • good
    • 0
この回答へのお礼

すみません、よく理解できなくて。

ということは、最初に私が質問した記述でよいと言うことでしょうか?

お礼日時:2007/10/24 18:42

<住所録主表>


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の筈です。

※ただし、新規追加の時の対策は必要かと・・・。
    • good
    • 0
この回答へのお礼

ありがとうございました。
サブフォーム.Visible = False
ではだめなんですね。

早速、教えて頂いた様にやってみます。

お礼日時:2007/10/24 16:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A