次の方法で共有

フォームのコンボボックスに入力したデータの取得について

Anonymous
2016-09-13T07:26:53+00:00

伝票入力画面で商品コードから商品名を表示するようにフォームを作成しています。

当初はコンボボックスから商品コードと商品名を表示して、クリックした商品コードと名前を表示することにしていました。

商品コードの量が多くてコンボボックスの一覧から選ぶのに時間がかかるので、直接商品コードを入力して、正しい商品コードなら商品名を表示もできるように機能追加することになりました。

今までのコンボボックスをそのままで、コンボボックスに商品コードを入力してEnterキーを押したら、商品名を表示するという機能を追加したいのです。

コンボボックスのプロパティの[キークリック時]イベントにEnterキーが押されたら、DLOOKUPで商品コードから商品名を表示するようにVBAでコーディングしました。

フォーム上のコンボボックスの欄に商品コードを入力し、フォーム上のコンボボックスには入力したものが表示されているのですが、[キークリック時]のイベントの際にはコンボボックスに入力した値が取得できません。

・コンボボックスは、ボックスを開いてマウスで選択しなければ、値は取得できないのでしょうか?(キーボードからの取得は無理?)

・[キークリック時]はキーボートの判定だけで、コンボボックス上に入力された値は取得できないのでしょうか?

ちなみに[キークリック時]のイベントではEnterキーの判定までできています。

ご存知の方がいらっしゃったらアドバイスをよろしくお願いします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

6 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2016-09-13T12:42:05+00:00

    > コンボボックスのプロパティの[キークリック時]イベントにEnterキーが押されたら、

    > DLOOKUPで商品コードから商品名を表示するようにVBAでコーディングしました

    > フォーム上のコンボボックスの欄に商品コードを入力し、

    > フォーム上のコンボボックスには入力したものが表示されているのですが、

    > [キークリック時]のイベントの際にはコンボボックスに入力した値が取得できません。

    VBAでコーディングしました」とおっしゃっている以上、

    それはあくまで VBA における技術的な問題であって、

    もしその処理によって期待通りの結果を得られないということであれば、

    実際に「VBAでコーディング」した内容に原因があるか、

    そもそも「[キークリック時]イベントで」対応しようとすることに

    無理があるのか、のどちらかを追及されるのは当然でしょう。

    それはコンボボックスを使う目的やそうなった経緯とは全然別の話です。

    仮に前者に着目するなら

    「実際に記述したコードに誤りはないか否か」

    を検証すること、

    後者に着目するなら

    「コンボボックスに対してある入力操作を行なった時、

     コンボボックスの各種イベントはどのような順番で発生し、

     各々のイベントにおいてその コンボボックスの

     Value プロパティ及び Text プロパティはどのような値を返すか

    を検証した上、具体的に「どのイベントで」

    「コンボボックスのどのプロパティを参照して」

    「どのような処理を実行するか」のが適しているのかを

    検討しなければなりません。

    少なくとも、実際に記述されたコードが明示されていない以上、

    そのコードにおいてコンボボックスの Value プロパティと

    Text プロパティのどちらを参照されているのかも分かりませんし、

    またそのプロパティの値と[商品マスタ]のどのフィールドとを

    照合されているかも分かりません。

    実際にコンボボックスの Value プロパティを参照されているのか

    それともコンボボックスの Text プロパティを参照されているのか

    未だ不明なままですが、いずれにせよ、当初から申し上げている通り

    「 AfterUpdate イベントで充分ではないか」

    という私の見解に変わりはありません。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2016-09-13T10:36:42+00:00

    sk.exeさんへ

    Accessの入力フォームをプロトタイプで作る時は、マスターがあるので商品コードと商品名は、コンボボックスを使うと非常に手軽です。

    ただデータが多くなるとコンボボックスに拘ると意外と足かせになります。50件を越えるとコンボボックスだけによる入力は時間がかかってしまいます。

    今のところ一覧から選ぶコンボボックスの他に、商品名から商品コードを選び出せるキーワード検索までなんとかできています。

    たた定番商品になるとコードを覚えてしまうので、直接コード入力をしたいといわれて、コンボボックスに直接入力して使おうとしてうまくいかなくてここで質問をした次第です。

    商品コードおよび商品名については次の3通りの入力方法で行うことにする。

    ・商品コードを入力できるテキストボックスを新たに作成し、商品コードテキストボックス入力後に商品名を表示する。

    ・既存のコンボボックスから選択された商品コードを、商品コードテキストボックスに表示し商品名を表示する。

    ・キーワード検索フォームで選択した商品コードを、商品コードテキストボックスに表示し商品名を表示する。

    今回の質問はVBAというより、コンボボックスはどこまで使うべきなのかというものでした。

    フォームに専用のテキストボックスを追加することで、対応することがべターなのかもしれないと思いました。

    このような質問にも真剣に答えていただきどうもありがとうございます。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2016-09-13T09:16:49+00:00

    > 今まではコンボボックスを開くと

    > 商品マスターの商品コードと商品名が一覧表示して、

    > マウスでクリックすると選択されます。

    >

    > コンボボックスの[変更時]イベントで、

    > 選択後の処理をVBAのイベントプロシージャで行っています。

    (繰り返しになりますが)

    実際にどのようなコードを記述されたのかが不明です。

    例えば、それぞれのイベントプロシージャにおいて、

    DLookup 関数を呼び出しているステートメントや、

    テキストボックス[商品名]に値の代入を行なうステートメントが記述されているのであれば、、

    それらのステートメントをそっくりそのまま明記されることをお奨めします。

    「こんな処理をやってます」と大まかな説明をされても、

    実際のコードが具体的に記載されていない限り、

    そのコードの構文やロジックに本当に誤りはないのか、

    もし誤りがあるなら、それは具体的にどのようなものであるか、

    といったことを、第三者が評価/指摘することは出来ません。

    > 今作ろうとしているのは、コンボボックスに商品コードを直接入力して

    > Enterキーを押した段階で、コンボボックスの[変更時]イベントと同様の処理がしたいのです。

    > (コンボボックスが開いて商品名は表示されないくても構わない)

    AfterUpdate イベントで行なえば充分ではないでしょうか。

    > コンボボックスは3列になっていて、

    > 1列目はオートナンバーで列幅ゼロなので非表示、

    > 2列目に商品コード、3列目に商品名になっています。

    > コンボボックスを開かずに直接入力すると1列目に入力されている気がするのです。

    そのコンボボックスの**[連結列]プロパティの値が 1 ならば**、

    選択行の 1 列目(オートナンバー型のフィールド)の値が

    そのコンボボックスの値( Value プロパティ)ということになりますし、

    また[列幅]プロパティの設定により 1 列目(連結列)を非表示にしているならば、

    コンボボックスのテキストボックスの値( Text プロパティ)は

    選択行の最も左側の表示列=2 列目([商品コード])ということになりますし、

    その値( Text プロパティ)はコンボボックス自体の値( Value プロパティ)とは

    必ずしもイコールとはなり得ません。

    (というか、まず一致しないはず)

    > 3列目に商品名になっています

    ただ「コンボボックスの 3 列目の値を表示する」だけなら、

    例えば[コントロールソース]プロパティに次のような式が

    設定された演算テキストボックスを配置してもよいでしょう。


    =[コンボボックス名].Column


    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2016-09-13T08:21:43+00:00

    sk.exe様

    返信ありがとうございます。

    情報が不足していて申し訳ありません。コンボボックスのデータは、商品マスターのテーブルからクエリビルダで表示させています。

    今まではコンボボックスを開くと商品マスターの商品コードと商品名が一覧表示して、マウスでクリックすると選択されます。

    コンボボックスの[変更時]イベントで、選択後の処理をVBAのイベントプロシージャで行っています。

    今作ろうとしているのは、コンボボックスに商品コードを直接入力してEnterキーを押した段階で、コンボボックスの[変更時]イベントと同様の処理がしたいのです。(コンボボックスが開いて商品名は表示されないくても構わない)

    コンボボックスは3列になっていて、1列目はオートナンバーで列幅ゼロなので非表示、2列目に商品コード、3列目に商品名になっています。コンボボックスを開かずに直接入力すると1列目に入力されている気がするのです。

    そもそも、コンボボックスを開かずに直接入力したものを、コンボボックスの値として取得すること自体が無謀なのでしょうか?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  5. Anonymous
    2016-09-13T07:58:07+00:00

    > コンボボックスのプロパティの[キークリック時]イベントにEnterキーが押されたら、

    > DLOOKUPで商品コードから商品名を表示するようにVBAでコーディングしました。

    実際にどのようなコードを記述されたのかが不明です。

    そもそも、KeyDown イベントでなくとも

    AfterUpdate イベントで充分なのではないでしょうか。

    また、ただ「コンボボックスの 2 列目の値を表示する」だけなら、

    例えば[コントロールソース]プロパティに次のような式が

    設定された演算テキストボックスを配置してもよいでしょう。


    =[コンボボックス名].Column


    この回答は役に立ちましたか?

    0 件のコメント コメントはありません