回答編集履歴
2
説明追記
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
コード修正
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.
|
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.
|
23
|
+
!社員ID.DefaultValue = DLookup("社員ID", "社員テーブル", .Filter)
|
21
24
|
End With
|
22
25
|
```
|