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

回答編集履歴

2

コード微修正

2020/10/07 14:20

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -20,11 +20,11 @@
20
20
  作業月 Between '2020年08月' AND '2020年10月'
21
21
  ```
22
22
 
23
- これをVBAはSQLコードをコードとして解釈できないのでVBAの文字列にします。
23
+ VBAはSQLコードをコードとして解釈できないので、このSQL条件式をVBAの文字列にします。
24
24
  VBAの文字列は"で囲みます。('では囲めません。)
25
25
 
26
26
  ```VBA
27
- "作業月 Between ""2020年08月"" AND ""2020年10月""
27
+ "作業月 Between ""2020年08月"" AND ""2020年10月"""
28
28
 
29
29
  または
30
30
 

1

説明追記

2020/10/07 14:20

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -50,4 +50,37 @@
50
50
  strSearch = strSearch & _
51
51
  "(作業月 Between '" & Format(Me.Time_start,"yyyy\年mm\月") & _
52
52
  "' AND '" & Format(Me.Time_End,"yyyy\年mm\月") & "')"
53
- ```
53
+ ```
54
+
55
+ ---
56
+ > フォームで「月範囲指定」したい場合、どのような検索仕様にするのがスマートなのでしょうか。
57
+
58
+ 自分なら下記の2つのどちらかにします。
59
+
60
+ **1.テキストボックスの定型入力を使う。**
61
+
62
+ |プロパティ|設定値|
63
+ |:--|:--:|-
64
+ |定型入力|0000\年00\月;0;_|
65
+ |自動タブ|はい|
66
+
67
+ このように設定しておくと、Time_startテキストボックスで
68
+ 「202008[Enter]202010」と入力するだけで、"2020年08月"、"2020年10月"という文字列になります。
69
+ キーボード入力をメインに高速入力したい場合はつかう手法です。
70
+ 文字持つ列になっているので、VBAはFormat変換する必要はなくなります。
71
+
72
+ ```vba
73
+ strSearch = strSearch & " AND "
74
+ strSearch = strSearch & _
75
+ "(作業月 Between '" & Me.Time_start & _
76
+ "' AND '" & Me.Time_End & "')"
77
+ ```
78
+  
79
+ **2.年月選択はコンボボックスでする。**
80
+
81
+ コンボボックスの値集合タイプを「テーブル/クエリ」、値集合ソースを下記のように設定します。
82
+ ```
83
+ SELECT DISTINCT 作業月 FROM Q_月次_勤怠稼働クエリ ORDER BY 作業月;
84
+ ```
85
+ これでQ_月次_勤怠稼働クエリ内の作業月がリストに表示されますのでそれで年月を選択できます。
86
+ これも文字列になってますので、1.の場合と同じvbaでstrSearchに代入できます。