-PR-
解決済み

accessでコンボボックスの内容を変える方法を教えて下さい。

  • 困ってます
  • 質問No.8935
  • 閲覧数851
  • ありがとう数2
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 82% (39/47)

accessのフォームにてデータ入力画面を作成しています。
フィールド入力にコンボボックスを用いてリスト選択にしたいのですが、リストの量が膨大になってしまう為、その前のフィールド値によってリスト用テーブルを切り換えて使いたいと思っています。簡単に出来る方法があれば教えて下さい。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル13

ベストアンサー率 46% (643/1383)

えっと、問題を具体的にするために、以下のような設定だと仮定して話を進めます。
ご自身の環境と置き換えてお読みください。

・数千種類の商品の中から、任意の一つを選択したい。
・「T商品」テーブルには、次のフィールドがある。
  [商品ID],[商品名],[商品分類](テキスト型)
・フォーム上に、コンボボックス「コンボA」と「コンボB」がある。
・「コンボA」にて商品分類を選択し、コンボBに表示される商品を絞り込む。
・「コンボB」で商品IDを指定する。

******

1:コンボA と、コンボBをフォームに配置。

2:コンボA のプロパティ
  名前:コンボA
  コントロールソース:空白(非連結)
  値集合タイプ:テーブル/クエリ
  値集合ソース:SELECT 商品分類 FROM T商品 Group By 商品分類;

3:コンボBのプロパティ
  名前:コンボB
  コントロールソース:商品ID
  値集合タイプ:テーブル/クエリ
  値集合ソース:空白
  入力チェック:いいえ

4:コーディング

Private Sub コンボB_Enter()
  Dim strRowSource As String
  If Nz(Me.コンボA, "") = "" Then
    strRowSource = "SELECT 商品ID FROM T商品;"
  Else
    strRowSource = "SELECT 商品ID FROM T商品" _
    & " WHERE 商品分類 ='" & Me.コンボA & "';"
  End If
  Me.コンボB.RowSource = strRowSource
End Sub

なんかあったら、補足してください。
補足コメント
onken

お礼率 82% (39/47)

回答ありがとうございます。
申し訳ありませんが私ACCESS初心者の為、VBAではなくてクエリで実現する方法があれば教えていただきたいのですが。
でも、これを機会にVBAの勉強をしたいと思いました。
よろしくおねがいします。
投稿日時 - 2000-09-20 08:36:49
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル11

ベストアンサー率 19% (67/345)

"その前のフィールド値"用のコンボボックスを作り、リスト用コンボボックスと連結させます。
プロパティで連結数を入力してください。
この場合、"その前のフィールド値"=0、リスト用コンボボックス=1となります。
補足コメント
onken

お礼率 82% (39/47)

回答ありがとうございます。
私ACCESS初心者の為、もう少し詳しく教えていただきたいのですが。
出来ればクエリで実現する方法をお願いします。
投稿日時 - 2000-09-20 08:32:07

  • 回答No.2
レベル10

ベストアンサー率 33% (38/115)

基本的なところはわかっているものとして回答します。

コンボボックスA「cmb_a」で大項目を選んだ後、
コンボボックスB「cmb_b」に反映させると仮定します。
コンボボックスBはq_tmpを参照しています。

もっとよいやり方があるかとは思いますが。

---------------------------------------------
Private Sub cmb_a_AfterUpdate() '一時的にクエリー[q_tmp]を作ってcmb_bに反映
Dim qdf As QueryDef
Dim strSQL As String

strSQL = "SELECT code, name FROM テーブル名 WHERE code = '" + cmb_a + "';"
DoCmd.DeleteObject acQuery, "q_tmp" '前回作成したクエリーを削除
Set qdf = CurrentDb.CreateQueryDef("q_tmp", strSQL) '新しい条件でクエリーを作成
DoCmd.Requery "cmb_b" 'コンボボックスBを更新
End Sub
---------------------------------------------
※実行の前にダミーの[q_tmp]を作成しておいてください。
(内容はなんでもよい)

わからなければ補足してください。
補足コメント
onken

お礼率 82% (39/47)

回答ありがとうございます。
申し訳ありませんが私ACCESS初心者の為、VBAではなくてクエリで実現する方法があれば教えていただきたいのですが。
よろしくおねがいします。
投稿日時 - 2000-09-20 08:34:22
  • 回答No.4
レベル13

ベストアンサー率 46% (643/1383)

>申し訳ありませんが私ACCESS初心者の為、VBAではなくてクエリで実現する方法があれば教えていただきたいのですが。


クエリーでするなら、コンボBの値集合ソースの内容を、

SELECT 商品ID FROM T商品 WHERE 商品分類 = Forms![フォーム名]![コンボA]

みたいな感じのクエリーにして下さい。

参考までに、手順を書いときます。

1:下記1-A,1-Bのいずれか一つを実行する

1-A:上記SQL(SELECT云々の部分のこと)のテーブル名等を、テキストエディタで変更した後、コンボBの[値集合ソース]プロパティに貼り付ける

1-B:テーブル名等を変更した後、クエリーを新規作成して、[表示]-[SQLビュー]を実行し、そこに貼り付ける。*1
クエリーを保存し、コンボBの[値集合ソース]に、そのクエリーを指定する。
*1貼り付けた後、[表示]-[デザインビュー]で普通のクエリーの表示に戻ります。編集も可能です。

2:マクロを新規作成
  アクション:再クエリ
    コントロール名:コンボB

3:コンボBのプロパティの変更
  フォーカス取得時:「2:」で作成したマクロの名前

以上。これで、絞り込み機能が実現できる筈です。

ついでに、VBAでする時の方法も。

・フォームをデザインビューで開き、[表示]-[コード]を実行。
出てきた画面の最下行に、#3でのコードを貼り付ける。
フィールド名や、テーブル名は、適宜書き換える。


クエリーとVBAの動作の違いですが、クエリーを使った場合、コンボAが空白の時に、コンボBを展開しても何も表示されませんが、#3でのVBAの場合、コンボAが空白の時には、商品が全件表示されるようになっています。(このように、いろんな条件に応じて、様々な処理が出来るのが、VBAの強みです。)
お礼コメント
onken

お礼率 82% (39/47)

補足回答ありがとうございます。
色々試してみたのですが、クエリだとタイミングの問題が発生しそうだったのでコンボBのプロパティのイベント/フォーカス獲得時に前回教えて頂いたプロシージャを組み込みました。
その結果みごと思ったような入力画面が出来ました。
色々とありがとうございました。
投稿日時 - 0000-00-00 00:00:00
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ