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

回答編集履歴

3

コード修正

2020/03/01 14:31

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -17,7 +17,7 @@
17
17
  ```vba
18
18
  Private Sub 日付_Change()
19
19
  Dim s As String
20
- s = Me.日付2.Text
20
+ s = Me.日付.Text
21
21
  If Not IsDate(s) Then Exit Sub
22
22
 
23
23
  Me![年] = Format(s, "yyyy")

2

質問の追記に対する回答を追記

2020/03/01 14:31

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -35,4 +35,11 @@
35
35
  入力するフォーマットを限定して条件を追加したほうがいいかもしれない。
36
36
 
37
37
 
38
- 自分なら、最初の案のほうを採用します。
38
+ 自分なら、最初の案のほうを採用します。
39
+
40
+ ---
41
+ > 追記
42
+ 現状は日付にカレンダーを表示させて、そこをクリックして日付を表示させることが多いです。
43
+ なので、カレンダーをクリックして日付が変わったタイミングでrequeryが実行したいです。
44
+
45
+ それなら、上の後者のChangeイベントの方法でご希望の動作になります。

1

コード追加

2020/02/29 13:24

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -4,9 +4,35 @@
4
4
 
5
5
  |プロパティ|設定値|
6
6
  |:--|:--|
7
- |定型入力|0000\-00\-00;0;_|
7
+ |定型入力|0000/00/00;0;_|
8
8
  |自動タブ|はい|
9
9
 
10
10
  これで日付テキストボックスに、今日の日付なら
11
11
  20200227
12
- というように8桁の数字を入力すると自動的に次のコントロールへ移動して、Afterupdateイベントが発火します。
12
+ というように8桁の数字を入力すると自動的に次のコントロールへ移動して、Afterupdateイベントが発火します。
13
+
14
+ ---
15
+ Changeイベントで処理したいのなら、下記のような感じで。
16
+
17
+ ```vba
18
+ Private Sub 日付_Change()
19
+ Dim s As String
20
+ s = Me.日付2.Text
21
+ If Not IsDate(s) Then Exit Sub
22
+
23
+ Me![年] = Format(s, "yyyy")
24
+ Me![月] = Format(s, "mm")
25
+ Me![日] = Format(s, "dd")
26
+
27
+ Me![日報サブ].Requery
28
+ End Sub
29
+ ```
30
+
31
+ Changeイベントで入力中のテキストを取得するのは Textプロパティ。
32
+ IsDateでテキストが日付かどうか判断して日付のときだけ処理する。
33
+
34
+ ただし、これだけだと、2020/02 と入力した時点で日付と判断されるので、
35
+ 入力するフォーマットを限定して条件を追加したほうがいいかもしれない。
36
+
37
+
38
+ 自分なら、最初の案のほうを採用します。