- ベストアンサー
Accsee2003 フォームのコンボボックスの同期について
Access2003のフォームのコンボボックスで困っています。 フォームのコンボボックスで都道府県を選んだ次のコンボには該当都道府県の市町村を表示させたいのですが、うまくできません。 都道府県テーブルには都道府県のみ、市町村テーブルには市町村のみが入っていまして、都道府県IDでリレーションシップしてあります。 同じような質問がありまして何度かやってみましたが、エラーが出て実現できませんでした。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=233843 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1969695 ご教授いただければ幸いです。よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
No1です。 仮に 市町村テーブル名=[T_市町村] 市町村テーブルのフィールド名 = [市町村ID]、[都道府県ID]、[市町村名]、、、 フォームの名前=[フォーム名] フォーム上のコンボボックスの名前を [コンボ都道府県]、[コンボ市町村] であるとします。 [コンボ市町村] のプロパティで 値集合タイプに テーブル/クエリ 値集合ソースに SELECT [T_市町村].[市町村名] FROM [T_市町村] WHERE [T_市町村].[都道府県ID] = [FORMS]![フォーム名]![コンボ都道府県] [コンボ都道府県]の更新後処理のイベントに ME.コンボ市町村.VALUE = "" ME.コンボ市町村.REQUERY とすればできると思います。 エラーの原因については、コンボボックスの名前が正しく記述されていないのだと思いますが、 1.コンボボックスのイベントの更新後処理のところが [イベント プロシージャ] となっていますか? これはビルだの選択のときに コードビルダを選んでください。 2.コンボボックスの名前が me.xxxxxx.requery の xxxxxx の部分となっていることを確認してください。
その他の回答 (3)
質問者がやろうとしていることは、いたって簡単なことです。 回答者が答えられているように、書くべきコードは僅か1行です。 Private Sub コンボ_都道府県_AfterUpdate() Me.コンボ_市町村.Requery End Sub この1行をミスしているとは考えがたいことです。 また、それぞれの[値集合ソース]も SELECT 都道府県.ID, 都道府県.名称 FROM 都道府県; SELECT 市町村.ID, 市町村.都道府県_ID, 市町村.名称 FROM 市町村 WHERE (((市町村.都道府県_ID)=Forms!XXXXX!コンボ_都道府県)); になっているでしょう。 Forms!XXXXX! <-- は、実際のフォーム名! さて、これだけの作業でミスをする場合、 ********** 回答を誤解した場合 ********** Private Sub コンボ_都道府県_AfterUpdate() Me.コンボ_市町村.RowSource = Me.都道府県 <--- この行は不要! Me.コンボ_市町村.Requery End Sub と、誤解によって Me.コンボ_市町村.RowSource を作成する一文を挿入している! *********** 誤ってマクロを生成した *********** あるいは、プロシージャでなくマクロを作成しようとして中途半端なマクロが出来上がっている。 モジュールのマクロの確認も必要かと! ************ プロシージャをコピーした ************ もう一つ考えられるのはプロシージャのコピーです。 いかなることがあっても、プロシージャを丸ごとにコピーしてはなりません。 内部コードのみをコピーすることが肝心です。 生成したプロシージャのコピー・ペーストで移動することも不可です。 ※こんなところから、エラーの原因を探って下さい。
お礼
ご回答ありがとうございます。 フォームを最初から作り直したところ、うまくできました。 プロシージャを何度もコピー・ペーストしていたため、どこかおかしくなっていたようです。 これから勉強します。ありがとうございました。
ご確認いただきたいのですが、 [イベントプロシージャ]▼と・・・がのボタンが出てくると思いますが、その・・・のほうをクリックしていただくと、 private sub コンボ都道府県_afterupdate() end sub と出てきますので、その行間に ME.コンボ市町村.VALUE = "" ME.コンボ市町村.REQUERY とかいてありますか? その部分を forms.フォーム名.市町村.value = "" forms.フォーム名.市町村.requery と変えてもだめですか?
お礼
何度もありがとうございます。 変えただけではエラーが出ましたので、フォームを最初から作り直したところ、うまくできました。 何度もいじりすぎたせいか、どこかがおかしくなっていたようです。 お手数をおかけいたしました。ありがとうございました。
フォームの都道府県のコンボの値により市町村を限定するクエリを作り、 そのクエリを市町村を選ぶコンボのレコードソースとして、 都道府県のコンボの値が変更されたときに、市町村のコンボのrequeryをかける。 まあ表示されている最初の質問の答えそのものですけど。
補足
ご回答ありがとうございます。 書き忘れていましたが初心者ですのでエラーが出た時点で止まってしまいます。 質問の二つともにrequeryというのが出てきますが、そのとおりに実行すると”Me!市町村”マクロを見つけることができません。というエラーが出てしまいます。 具体的に教えていただければ大変ありがたいです。 よろしくお願いいたします。
お礼
ご回答ありがとうございました。 早速やってみましたが、 ”Me”マクロを見つけることができません。 マクロ(またはマクログループ)が存在しないか、新規マクロが保存されていません。 ”マクロ グループ名.マクロ名”という構文でマクロ名を指定するときは、既存のマクログループ名を指定する必要があります。 というエラーが出ました。 これは都道府県コンボを選択した後に出るエラーで、何度やり直しても同じでした。 市町村コンボのイベントの更新後処理のところを[イベント プロシージャ]にしても結果は同じでした。 コンボボックスの名前が間違いないことは何度も確認しました。 何かわかりましたらお願いしたいです。 よろしくお願いいたします。