質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

コンボボックス

GUIの要素のひとつです。Listboxと同様にいくつかのうちひとつを選択する機能だが、Comboboxの場合は選択されたもののみがデフォルトとして表示される。

Q&A

解決済

2回答

5073閲覧

Access ある値に紐づいた別の値を、コンボボックスに記入する方法

ryoya_access

総合スコア34

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

コンボボックス

GUIの要素のひとつです。Listboxと同様にいくつかのうちひとつを選択する機能だが、Comboboxの場合は選択されたもののみがデフォルトとして表示される。

0グッド

0クリップ

投稿2020/08/12 07:19

実現したいこと

Access(2007-2016)で勤怠管理DBを作成しています。

フォームのコンボボックスにVBAで値を入力させようとしているのですが、「実行時エラー2113 このフィールドに入力した値が正しくありません」と表示され、うまく入力できません。ある値に紐づいた別の値を、コンボボックスに記入する方法を教えていただきたいです。

以下、詳細になります。

テーブルとリレーション

〇使用テーブルは7つで、このようにリレーションを組んでいます。以下に、今回使用するテーブル3つを記載します。
イメージ説明

1.勤怠テーブル----------------
勤怠管理No:オートナンバー
社員ID:数値
出社日:日付
出社時間:日付/時刻
退社時間:日付/時刻

勤怠管理No 社員ID 出社日 出社時間 退社時間
1 1 2020/07/02
2 2 2020/07/02
3 3 2020/07/02
4 1 2020/07/03
5 2 2020/07/03
6 3 2020/07/03
7 4 2020/07/03
8 5 2020/07/03
9 3 2020/07/07

2.稼働テーブル------------------
稼働管理No:オートナンバー
勤怠管理No:数値
受注No:数値
タスクID:数値
稼働時間:数値

稼働管理No 勤怠管理No 受注No タスクID 稼働時間
1 1 1 3 4
2 1 1 2 5
3 1 3 5 2
4 2 1 2 3
5 2 2 1 3
6 3 3 5 2
7 4 3 4 10
8 5 3 4 6
9 5 1 3 7
10 6 1 2 8
11 7 2 5 9
12 7 3 4 4
13 8 3 4 3
14 9 3 5 4

3.社員テーブル------------------
社員ID:オートナンバー
社員名:短いテキスト
時給:数値

社員ID 社員名 時給
1 一郎 100
2 二郎 200
3 三郎 300
4 四郎 400
5 五郎 500

###詳細
サブフォーム付きのフォームで、従業員が日々の勤怠情報(氏名、出社日、出社時間、退社時間)と、その稼働内容を入力するフォーム「F_勤怠」を作成しています。今回サブフォームについては無視してください。

イメージ説明

ログインフォームでユーザー名とパスワードを入力すると、「ユーザー名」を保持したまま勤怠管理用のフォーム「F_勤怠」が開くようになっています。

※ログイン用フォームのテキストボックス「Login_UserName」に「一郎」と打ち込みログインした時、「F_勤怠」のテキストボックス「User_name」(赤マル部分)に「一郎」と記入される。
イメージ説明

ログインボタンクリック時 '勤怠管理用のメニューを開く DoCmd.OpenForm "F_勤怠" '社員名を「F_勤怠」の「User_name」欄に自動で表示 Forms![F_勤怠]![User_name] = Me.Login_UserName.Value

同様にして、「F_勤怠」のコンボボックス「社員ID」にも社員名を自動入力したいのですが、コンボボックス「社員ID」には社員IDを入力する必要があるため、社員名を入力できません。

コンボボックス「社員ID」の詳細-------------
コントロールソース:社員ID
値集合ソース:社員テーブル
連結列1
列数2
列幅0cm,3cm
ーーーーーーーーーーーーーーーーーーーーーーー

3.社員テーブル(再掲)------------------
社員ID:オートナンバー
社員名:短いテキスト
時給:数値

社員ID 社員名 時給
1 一郎 100
2 二郎 200
3 三郎 300
4 四郎 400
5 五郎 500

テキストボックス「User_name」に記入されている社員名をもとに、それに紐づいた社員IDをコンボボックス「社員ID」に入力するにはどのようにすれば良いのでしょうか。

初歩的な質問かもしれませんが、お力をお貸しいただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

非連結フォーム前提での回答でしたので、コード修正しました。

F_勤怠 が新規データ入力用フォームなら、

vba

1'勤怠管理用のメニューを開く 2DoCmd.OpenForm "F_勤怠", DataMode:=acFormAdd '新規入力用で開く 3 4With Forms![F_勤怠] 5 !User_name.Value = Me.Login_UserName.Value 6 !社員ID.DefaultValue = DLookup("社員ID", "社員テーブル", "社員名='" & !User_name.Value & "'") 7End With

既存レコードの修正用なら、

vba

1'勤怠管理用のメニューを開く 2DoCmd.OpenForm "F_勤怠", WhereCondition:="社員ID=" & DLookup("社員ID", "社員テーブル", "社員名='" & Me.Login_UserName.Value & "'") 3 4With Forms![F_勤怠] 5 !User_name.Value = Me.Login_UserName.Value 6 !社員ID.DefaultValue = DLookup("社員ID", "社員テーブル", .Filter) 7End With

コードの解説

新規データ入力用の場合は、OpenForm メソッドの引数で DataMode:=acFormAdd を指定して開くと、新規レコードのみ表示されるフォームになります。
Valueに代入すると不必要にレコードができてしまうので、DefaultValue(規定値)を設定するようにします。こうすると、新規レコードをどんどん追加していっても、自動で規定値として表示されます。

既存レコードの修正用の場合は、WhereCondition で対象社員を抽出するフィルターをかけてフォームを開きます。対象社員のレコードが表示されるので、社員ID にはすでに入力されています。
DefaultValue を設定しているのは、新規レコードへ移動した場合に、既定値として表示させるためです。

投稿2020/08/12 07:46

編集2020/08/12 13:48
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/08/12 07:49

それだとデータ確定してしまいませんか?
hatena19

2020/08/12 07:59

そうでした。非連結フォームのつもりでした。 回答修正しました。
guest

0

画面の構成上、F_勤怠のレコードソースで指定しているテーブルの社員IDに値がセットされないと社員IDコンボボックスには社員名が表示されません。

フォームのTOPに表示されているものと同じ内容なので、表示項目自体を持たなければ良いのでは?
但し、レコード確定時にはレコード移動時イベント等で値のセットは必要だと思いますけど。

投稿2020/08/12 07:45

編集2020/08/12 07:47
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問