質問するログイン新規登録

回答編集履歴

2

説明追記

2020/08/12 13:48

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -16,10 +16,18 @@
16
16
 
17
17
  ```vba
18
18
  '勤怠管理用のメニューを開く
19
- DoCmd.OpenForm "F_勤怠", WhereCondition:="社員名='" & Me.Login_UserName.Value & "'"
19
+ DoCmd.OpenForm "F_勤怠", WhereCondition:="社員ID=" & DLookup("社員ID", "社員テーブル", "社員名='" & Me.Login_UserName.Value & "'")
20
20
 
21
21
  With Forms![F_勤怠]
22
22
  !User_name.Value = Me.Login_UserName.Value
23
23
  !社員ID.DefaultValue = DLookup("社員ID", "社員テーブル", .Filter)
24
24
  End With
25
- ```
25
+ ```
26
+
27
+ コードの解説
28
+ ---
29
+ 新規データ入力用の場合は、OpenForm メソッドの引数で DataMode:=acFormAdd を指定して開くと、新規レコードのみ表示されるフォームになります。
30
+ Valueに代入すると不必要にレコードができてしまうので、DefaultValue(規定値)を設定するようにします。こうすると、新規レコードをどんどん追加していっても、自動で規定値として表示されます。
31
+
32
+ 既存レコードの修正用の場合は、WhereCondition で対象社員を抽出するフィルターをかけてフォームを開きます。対象社員のレコードが表示されるので、社員ID にはすでに入力されています。
33
+ DefaultValue を設定しているのは、新規レコードへ移動した場合に、既定値として表示させるためです。

1

コード修正

2020/08/12 13:48

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -1,22 +1,25 @@
1
+ 非連結フォーム前提での回答でしたので、コード修正しました。
2
+
3
+ F_勤怠 が新規データ入力用フォームなら、
4
+
1
5
  ```vba
2
6
  '勤怠管理用のメニューを開く
3
- DoCmd.OpenForm "F_勤怠"
7
+ DoCmd.OpenForm "F_勤怠", DataMode:=acFormAdd '新規入力用で開く
4
8
 
5
9
  With Forms![F_勤怠]
6
10
  !User_name.Value = Me.Login_UserName.Value
7
- !社員ID.Value = DLookup("社員ID", "社員テーブル", "社員名='" & !User_name.Value & "'")
11
+ !社員ID.DefaultValue = DLookup("社員ID", "社員テーブル", "社員名='" & !User_name.Value & "'")
8
12
  End With
9
13
  ```
10
14
 
11
- あるいは
15
+ 既存レコードの修正用なら
12
16
 
13
17
  ```vba
14
18
  '勤怠管理用のメニューを開く
15
- DoCmd.OpenForm "F_勤怠"
19
+ DoCmd.OpenForm "F_勤怠", WhereCondition:="社員名='" & Me.Login_UserName.Value & "'"
16
20
 
17
21
  With Forms![F_勤怠]
18
22
  !User_name.Value = Me.Login_UserName.Value
19
- !社員ID.SetFocus
20
- !社員ID.Text = !User_name.Value
23
+ !社員ID.DefaultValue = DLookup("社員ID", "社員テーブル", .Filter)
21
24
  End With
22
25
  ```