dポイントプレゼントキャンペーン実施中!

現在Access VBAでサブフォームの中にあるコンボボックスの一覧を、サブフォームの表示項目を行ごとに変更する処理を探しています。

まず、下の画像をご覧下さい。
http://www.accessclub.jp/bbs4/img/3949.jpg

下の画像の場合、「地区」列の項目が「中部地方」か「近畿地方」かによって、「都道府県」コンボボックスの一覧を変更させたいのです。
例えば、「地区」列の項目が「中部地方」になっている行は、「都道府県」の項目には中部地方の県名がコンボボックスの一覧に表示され、「近畿地方」になっている行は、近畿地方の2府4件がコンボボックスの一覧に表示されるような処理を作成したいのです。

下は各テーブルの情報を表示させた画像です。
http://www8.uploader.jp/user/minori/images/minor …

そのようなプログラムを作ろうと、下のようなプログラムを作成しました。
Private Sub Form_Load()

'AreaID  :「地区」コンボボックス
'AreaSubID:「都道府県」コンボボックス

strSQL = "SELECT "
strSQL = strSQL & "AreaSubID,PrefectureName "
strSQL = strSQL & "FROM "
strSQL = strSQL & "M_AREA_SUB "
strSQL = strSQL & "WHERE AreaID = " & Me.AreaID.Column(0) & " "
strSQL = strSQL & "ORDER BY AreaSubID "

Me.AreaSubID.RowSource = strSQL

End Sub

しかし、上のプログラムでは全ての、「都道府県」列に処理が行われるため、一覧を変更させたくない行まで変更がかかってしまいます。
サブフォームの中にあるコンボボックスの更新処理で、指定の行だけを変更させるということは可能なのでしょうか?
そして可能であればその方法を教えていただけませんでしょうか?

よろしくお願いします。
なお、OSとAccessのバージョンは以下の通りです。

OS:Windows XP SP2
Accessのバージョン:2003

A 回答 (3件)

    • good
    • 0
この回答へのお礼

おお! こんなものがあるとは知りませんでした!!

早速参照させていただきます!!

お礼日時:2009/04/30 14:27

結論から言うと、「可能」です。

以下は前提
フォーム:F
フォーム内のサブフォーム:S
サブフォーム内のAreaID:A
サブフォーム内のAreaSubId:X
サブフォーム:Y

1.Xの値集合ソースに以下のSQLを指定
SELECT AreaSubID,PrefectureName FROM M_AREA_SUB
WHERE AreaID=Forms!F!S.form.A ORDER BY AreaSubID
2.Yの「レコード移動時」のイベントプロシージャを作り、以下の
ようにプログラムする。
Private Sub Form_Current()
Me.X.Requery '★命令はこの1行のみ
End Sub

レコード位置(行)が変わる度に、クエリが実行され、コンボの
リスト内容が入れ替わります。
    • good
    • 0
この回答へのお礼

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

しかしこの方法だと、やはり表示項目を変えたくない行の表示項目までかわってしまいます・・・

初回起動時に、
http://www8.uploader.jp/user/minori/images/minor …
の「目的の表示結果」のような表示になるのが理想なのですが、そのようにはならないものなのでしょうか?

わがままな質問で申し訳ございません。。

お礼日時:2009/04/23 09:56

SQLはそのままでいいと思いますよ


コンボボックスAreaIDの内容が変更された際のイベントで
AreaSubIDを更新しているのでしょうか?

Private Sub AreaID_Change()
  AreaSubID.Requery
  AreaSubID.Value = ""
End Sub
といった具合にしておかないと 近畿/中部を切り替えても AreaSubID側のドロップダウンリストは更新されないと思います
    • good
    • 0

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

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


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