回答編集履歴

3

追記

2020/05/08 13:28

投稿

sinzou
sinzou

スコア392

test CHANGED
@@ -131,3 +131,177 @@
131
131
  ![イメージ説明](538bb27f482359f35336893ca44a2293.png)
132
132
 
133
133
  Dim Col As Colsを宣言することによて、クラス名と先生氏名がぶら下がり、Col.クラス名とCol.先生氏名が使えるようになります。ステップ実行やブレークポイントで止めてColをクイックウォッチに登録すると右のようにColの下にクラス名 As Longと先生氏名 As Longがあるのがわかると思います。
134
+
135
+
136
+
137
+ 追記3
138
+
139
+ 全体の流れ見ていませんでした、すみません。
140
+
141
+ main()でファイルパス作って、FileAttachに渡さないといけなかったです。
142
+
143
+ ```VBA
144
+
145
+ Enum Col '1以降の数値を省略した場合は+1される
146
+
147
+ 宛先 = 1
148
+
149
+ 複写
150
+
151
+ クラス名
152
+
153
+ 氏名
154
+
155
+ 添付キーワード
156
+
157
+ 先生氏名
158
+
159
+ End Enum
160
+
161
+
162
+
163
+ Sub main()
164
+
165
+ Dim Col As Cols
166
+
167
+ Dim r As Long
168
+
169
+ 'Outlookオブジェクトの作成
170
+
171
+ Dim OutlookObj As Outlook.Application
172
+
173
+ Set OutlookObj = New Outlook.Application
174
+
175
+
176
+
177
+ Dim r As Long
178
+
179
+ For r = 2 To Cells(1, 1).End(xlDown).Row
180
+
181
+
182
+
183
+ 'メールアイテムオブジェクト作成
184
+
185
+ Dim mailItemObj As Outlook.MailItem
186
+
187
+ Set mailItemObj = OutlookObj.CreateItem(olMailItem)
188
+
189
+
190
+
191
+ '添付ファイルオブジェクトの生成
192
+
193
+ Dim attachObj As Outlook.Attachments
194
+
195
+ Set attachObj = mailItemObj.Attachments
196
+
197
+
198
+
199
+ Dim cName As String, sName As String, tName As String
200
+
201
+ cName = Cells(r, Col.クラス名).Value
202
+
203
+ tName = Cells(r, Col.先生氏名).Value
204
+
205
+
206
+
207
+ FileStorePath = "C:\Outlookテスト\" & tName & "先生\" & cName & "\通知"
208
+
209
+
210
+
211
+ '★添付ファイルが存在する場合のみ、メールアイテムを作成する
212
+
213
+ If FileAttach(attachObj, FileStorePath) = True Then
214
+
215
+
216
+
217
+ 'メール本文作成
218
+
219
+ Dim mailBody As String
220
+
221
+ mailBody = CreateMailBody(r)
222
+
223
+
224
+
225
+ 'メールアイテム作成
226
+
227
+ With mailItemObj
228
+
229
+ .To = Cells(r, Col.宛先).Value
230
+
231
+ .CC = Cells(r, Col.複写).Value
232
+
233
+ .Subject = Cells(1, "I").Value '件名
234
+
235
+ .Body = mailBody '本文
236
+
237
+ End With
238
+
239
+
240
+
241
+ mailItemObj.Display '下書きを表示
242
+
243
+
244
+
245
+ '次のメールアイテムを作成するためいったん破棄
246
+
247
+ Set mailItemObj = Nothing
248
+
249
+
250
+
251
+ End If
252
+
253
+ End Sub
254
+
255
+
256
+
257
+ ```
258
+
259
+ ```VBA
260
+
261
+ Function FileAttach(attachObj As Object, FileStorePath As String) As Boolean
262
+
263
+
264
+
265
+ Dim fileCnt As Long '★添付したファイル数をカウントする
266
+
267
+
268
+
269
+ Dim FileName As String
270
+
271
+ FileName = Dir(FileStorePath & "\" & "*")
272
+
273
+
274
+
275
+ 'フォルダ内のファイル数、検索を繰り返す&"
276
+
277
+ Do While FileName <> ""
278
+
279
+ attachObj.Add FileStorePath & "\" & FileName
280
+
281
+ fileCnt = fileCnt + 1 '★添付したファイル数
282
+
283
+ FileName = Dir()
284
+
285
+
286
+
287
+ FileName = Dir()
288
+
289
+ Loop
290
+
291
+
292
+
293
+ Set attachObj = Nothing
294
+
295
+
296
+
297
+ '★1以上のファイルを添付した場合Trueを返す
298
+
299
+ '(Boolean型の初期値はFalse)
300
+
301
+ If fileCnt > 0 Then FileAttach = True
302
+
303
+
304
+
305
+ End Function
306
+
307
+ ```

2

追記

2020/05/08 13:28

投稿

sinzou
sinzou

スコア392

test CHANGED
@@ -125,3 +125,9 @@
125
125
 
126
126
 
127
127
  ```
128
+
129
+ 追記2
130
+
131
+ ![イメージ説明](538bb27f482359f35336893ca44a2293.png)
132
+
133
+ Dim Col As Colsを宣言することによて、クラス名と先生氏名がぶら下がり、Col.クラス名とCol.先生氏名が使えるようになります。ステップ実行やブレークポイントで止めてColをクイックウォッチに登録すると右のようにColの下にクラス名 As Longと先生氏名 As Longがあるのがわかると思います。

1

追記

2020/05/08 13:07

投稿

sinzou
sinzou

スコア392

test CHANGED
@@ -23,3 +23,105 @@
23
23
 
24
24
 
25
25
  とか
26
+
27
+
28
+
29
+ 追記1
30
+
31
+ ほぼ完成かと、、keyword使わないので消したほうがいいですね
32
+
33
+
34
+
35
+ FileAttach
36
+
37
+ ```VBA
38
+
39
+ ' 処理① キーワードに合致するファイルを添付する
40
+
41
+ ' 処理② 1つ以上のファイルが見つかった場合、Trueを返す
42
+
43
+ Function FileAttach(attachObj As Object) As Boolean
44
+
45
+
46
+
47
+ Dim fileCnt As Long '★添付したファイル数をカウントする
48
+
49
+
50
+
51
+ Dim FileStorePath As String 'ファイル格納パス
52
+
53
+ FileStorePath = "C:\Outlookテスト\" & Cells(r, "D") & "先生\" & Cells(r, "E") & "\通知"
54
+
55
+
56
+
57
+ Dim FileName As String
58
+
59
+ FileName = Dir(FileStorePath & "\" & "*")
60
+
61
+
62
+
63
+ 'フォルダ内のファイル数、検索を繰り返す&"
64
+
65
+ Do While FileName <> ""
66
+
67
+ 'Debug.Print FileStorePath & "\" & FileName
68
+
69
+ attachObj.Add FileStorePath & "\" & FileName
70
+
71
+ fileCnt = fileCnt + 1 '★添付したファイル数
72
+
73
+ FileName = Dir()
74
+
75
+
76
+
77
+ Loop
78
+
79
+
80
+
81
+ Set attachObj = Nothing
82
+
83
+
84
+
85
+ '★1以上のファイルを添付した場合Trueを返す
86
+
87
+ '(Boolean型の初期値はFalse)
88
+
89
+ If fileCnt > 0 Then FileAttach = True
90
+
91
+
92
+
93
+ End Function
94
+
95
+ ```
96
+
97
+ main修正前
98
+
99
+ ```VBA
100
+
101
+ Dim keyword As String
102
+
103
+ keyword = Cells(r, col.添付キーワード)
104
+
105
+
106
+
107
+ '★添付ファイルが存在する場合のみ、メールアイテムを作成する
108
+
109
+ If FileAttach(attachObj, keyword) = True Then
110
+
111
+
112
+
113
+ ```
114
+
115
+ main修正後
116
+
117
+ ```VBA
118
+
119
+
120
+
121
+ '★添付ファイルが存在する場合のみ、メールアイテムを作成する
122
+
123
+ If FileAttach(attachObj) = True Then
124
+
125
+
126
+
127
+ ```