回答編集履歴

2

説明追記

2020/08/12 13:48

投稿

hatena19
hatena19

スコア33782

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  '勤怠管理用のメニューを開く
36
36
 
37
- DoCmd.OpenForm "F_勤怠", WhereCondition:="社員名='" & Me.Login_UserName.Value & "'"
37
+ DoCmd.OpenForm "F_勤怠", WhereCondition:="社員ID=" & DLookup("社員ID", "社員テーブル", "社員名='" & Me.Login_UserName.Value & "'")
38
38
 
39
39
 
40
40
 
@@ -47,3 +47,19 @@
47
47
  End With
48
48
 
49
49
  ```
50
+
51
+
52
+
53
+ コードの解説
54
+
55
+ ---
56
+
57
+ 新規データ入力用の場合は、OpenForm メソッドの引数で DataMode:=acFormAdd を指定して開くと、新規レコードのみ表示されるフォームになります。
58
+
59
+ Valueに代入すると不必要にレコードができてしまうので、DefaultValue(規定値)を設定するようにします。こうすると、新規レコードをどんどん追加していっても、自動で規定値として表示されます。
60
+
61
+
62
+
63
+ 既存レコードの修正用の場合は、WhereCondition で対象社員を抽出するフィルターをかけてフォームを開きます。対象社員のレコードが表示されるので、社員ID にはすでに入力されています。
64
+
65
+ DefaultValue を設定しているのは、新規レコードへ移動した場合に、既定値として表示させるためです。

1

コード修正

2020/08/12 13:48

投稿

hatena19
hatena19

スコア33782

test CHANGED
@@ -1,8 +1,16 @@
1
+ 非連結フォーム前提での回答でしたので、コード修正しました。
2
+
3
+
4
+
5
+ F_勤怠 が新規データ入力用フォームなら、
6
+
7
+
8
+
1
9
  ```vba
2
10
 
3
11
  '勤怠管理用のメニューを開く
4
12
 
5
- DoCmd.OpenForm "F_勤怠"
13
+ DoCmd.OpenForm "F_勤怠", DataMode:=acFormAdd '新規入力用で開く
6
14
 
7
15
 
8
16
 
@@ -10,7 +18,7 @@
10
18
 
11
19
  !User_name.Value = Me.Login_UserName.Value
12
20
 
13
- !社員ID.Value = DLookup("社員ID", "社員テーブル", "社員名='" & !User_name.Value & "'")
21
+ !社員ID.DefaultValue = DLookup("社員ID", "社員テーブル", "社員名='" & !User_name.Value & "'")
14
22
 
15
23
  End With
16
24
 
@@ -18,7 +26,7 @@
18
26
 
19
27
 
20
28
 
21
- あるいは
29
+ 既存レコードの修正用なら
22
30
 
23
31
 
24
32
 
@@ -26,7 +34,7 @@
26
34
 
27
35
  '勤怠管理用のメニューを開く
28
36
 
29
- DoCmd.OpenForm "F_勤怠"
37
+ DoCmd.OpenForm "F_勤怠", WhereCondition:="社員名='" & Me.Login_UserName.Value & "'"
30
38
 
31
39
 
32
40
 
@@ -34,9 +42,7 @@
34
42
 
35
43
  !User_name.Value = Me.Login_UserName.Value
36
44
 
37
- !社員ID.SetFocus
38
-
39
- !社員ID.Text = !User_name.Value
45
+ !社員ID.DefaultValue = DLookup("社員ID", "社員テーブル", .Filter)
40
46
 
41
47
  End With
42
48