• ベストアンサー

ACCESS コンボボックスの表示内容を入力項目にしたい

Accessの回答履歴を調べたのですが、結局わからなくて質問させて頂きました。お願いします。 入力したいデータ(口座管理情報)があります。 項目は社員番号、氏名、銀行口座 社員マスターがあるので、社員番号はコンボボックスにして選択できるようにしたいと思ってます。 社員番号をコンボボックスで選択すると、社員マスター上の氏名を口座管理情報の氏名に設定したいのですが、どうすればいいのでしょうか? また、口座管理情報入力の画面は表形式にして連続で入力させたいと思っています。 各行に単純にテキストとしてコンボで選んだ社員の氏名を表示させる事は出来るのですが、入力項目に設定する方法がわかりません。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

>パッケージ製品のマスターを社内で正としているので、安易に手を加えるわけ >にもいかないんです。 そうですか。では、ご希望の動作をVBAで実現するための例を示します。ご参考になれば、幸いです。(VBAとはいえ、簡単なコードです。是非お試し下さい。) <前提> 1. 社員番号コンボボックスのプロパティを次のとおり設定。 名前:cmbCode 集合値タイプ:テーブル/クエリ 集合値ソース:SELECT 社員番号,氏名 FROM 社員マスター ORDER BY 社員番号; 列数:2 列幅:1;3 連結列:1 入力チェック:はい 2. 社員氏名テキストボックスのプロパティを次のとおり設定。 名前:txtSyainName 編集ロック:はい 使用可:いいえ タブストップ:いいえ 上記のように各コントロールのプロパティを設定したら、フォームに次のVBAコードを貼付け。 Private Sub cmbCode_BeforeUpdate(Cancel As Integer)   On Error GoTo ErrorHandler   'コンボボックスの2列目(0から数えたら1列目)を代入   txtSyainName = cmbCode.Column(1) ExitHandler:   Exit Sub ErrorHandler:   Cancel = True   Resume ExitHandler End Sub これだけです。折角ですから、チャレンジされたらどうでしょうか?

Ryokucha
質問者

お礼

お返事ありがとうございました。 おかげ様で、ようやく出来ました。 簡単な処理なのにここまでしなくてはならないのも辛いですね。 もっとVBAも勉強します^_^;

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

Ryokuchaさんの意向を尊重すれば、方法はVBAでしょうね。 ただ、私も#1の NorthMole さんと同じ意見です。NorthMole さんがコメントされていますが、口座管理情報に氏名を記録する必要性はあるのでしょうか? これがネックになって、解決方法を限定しています。 >社員マスターが履歴管理されておらず、結婚などで氏名が変わった場合を >想定して、口座管理は履歴を残したいと思っています。 とするなら例えば、フィールド:社員番号,変更日,変更内容 のような履歴管理テーブルを作成することをお勧めします。 「テーブルの正規化」ってやつですね。

Ryokucha
質問者

お礼

お返事ありがとうございます。 社員マスターを変更して履歴を管理することが望ましいとは思うのですが、パッケージ製品のマスターを社内で正としているので、安易に手を加えるわけにもいかないんです。 社員マスターは定期的にCSVに吐き出したものを貰って対応しようとしています。 私の部署だけで履歴管理してもしょうがないと思い、取り合えず目先の必要な情報を確保しておこうかと思ってます。 やはりVBAによる解決しかないですね。

  • NorthMole
  • ベストアンサー率24% (20/82)
回答No.1

根本的に、社員番号を使って社員マスターから情報をリンクできるのにもかかわらず、口座管理情報に氏名を敢えて各必要性があるのかわかりませんが、本題からそれるので、それは置いときます。 また、フォーム上での操作であると想定しています。 >また、口座管理情報入力の画面は表形式にして連続で入力させたいと思っています。 >各行に単純にテキストとしてコンボで選んだ社員の氏名を表示させる事は出来るのですが ということですので、コンボボックスで社員番号を入力すると、別のテキストコントロールへ氏名を表示することができるということだと思います。 例えば、口座管理情報内の氏名に対応するフィールドを設定し、可視を'いいえ'にしておきます。 VBAでの作成になりますが、レコードの更新前処理等のイベントで、コンボボックスの情報から、氏名のフィールドへ情報を転写したらいかがでしょうか?

Ryokucha
質問者

お礼

お返事ありがとうございます。 氏名を別途管理しておきたいのは、社員マスターが履歴管理されておらず、結婚などで氏名が変わった場合を想定して、口座管理は履歴を残したいと思っています。 やはりVBAを使用しないとできませんか? ほとんどVBAは知らないし、もっと簡単に出来ることかと思っていました。 VBAも研究してみます。

関連するQ&A

専門家に質問してみよう