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

回答編集履歴

3

追記

2020/05/08 13:28

投稿

sinzou
sinzou

スコア392

answer CHANGED
@@ -64,4 +64,91 @@
64
64
  ```
65
65
  追記2
66
66
  ![イメージ説明](538bb27f482359f35336893ca44a2293.png)
67
- Dim Col As Colsを宣言することによて、クラス名と先生氏名がぶら下がり、Col.クラス名とCol.先生氏名が使えるようになります。ステップ実行やブレークポイントで止めてColをクイックウォッチに登録すると右のようにColの下にクラス名 As Longと先生氏名 As Longがあるのがわかると思います。
67
+ Dim Col As Colsを宣言することによて、クラス名と先生氏名がぶら下がり、Col.クラス名とCol.先生氏名が使えるようになります。ステップ実行やブレークポイントで止めてColをクイックウォッチに登録すると右のようにColの下にクラス名 As Longと先生氏名 As Longがあるのがわかると思います。
68
+
69
+ 追記3
70
+ 全体の流れ見ていませんでした、すみません。
71
+ main()でファイルパス作って、FileAttachに渡さないといけなかったです。
72
+ ```VBA
73
+ Enum Col '1以降の数値を省略した場合は+1される
74
+ 宛先 = 1
75
+ 複写
76
+ クラス名
77
+ 氏名
78
+ 添付キーワード
79
+ 先生氏名
80
+ End Enum
81
+
82
+ Sub main()
83
+ Dim Col As Cols
84
+ Dim r As Long
85
+ 'Outlookオブジェクトの作成
86
+ Dim OutlookObj As Outlook.Application
87
+ Set OutlookObj = New Outlook.Application
88
+
89
+ Dim r As Long
90
+ For r = 2 To Cells(1, 1).End(xlDown).Row
91
+
92
+ 'メールアイテムオブジェクト作成
93
+ Dim mailItemObj As Outlook.MailItem
94
+ Set mailItemObj = OutlookObj.CreateItem(olMailItem)
95
+
96
+ '添付ファイルオブジェクトの生成
97
+ Dim attachObj As Outlook.Attachments
98
+ Set attachObj = mailItemObj.Attachments
99
+
100
+ Dim cName As String, sName As String, tName As String
101
+ cName = Cells(r, Col.クラス名).Value
102
+ tName = Cells(r, Col.先生氏名).Value
103
+
104
+ FileStorePath = "C:\Outlookテスト\" & tName & "先生\" & cName & "\通知"
105
+
106
+ '★添付ファイルが存在する場合のみ、メールアイテムを作成する
107
+ If FileAttach(attachObj, FileStorePath) = True Then
108
+
109
+ 'メール本文作成
110
+ Dim mailBody As String
111
+ mailBody = CreateMailBody(r)
112
+
113
+ 'メールアイテム作成
114
+ With mailItemObj
115
+ .To = Cells(r, Col.宛先).Value
116
+ .CC = Cells(r, Col.複写).Value
117
+ .Subject = Cells(1, "I").Value '件名
118
+ .Body = mailBody '本文
119
+ End With
120
+
121
+ mailItemObj.Display '下書きを表示
122
+
123
+ '次のメールアイテムを作成するためいったん破棄
124
+ Set mailItemObj = Nothing
125
+
126
+ End If
127
+ End Sub
128
+
129
+ ```
130
+ ```VBA
131
+ Function FileAttach(attachObj As Object, FileStorePath As String) As Boolean
132
+
133
+ Dim fileCnt As Long '★添付したファイル数をカウントする
134
+
135
+ Dim FileName As String
136
+ FileName = Dir(FileStorePath & "\" & "*")
137
+
138
+ 'フォルダ内のファイル数、検索を繰り返す&"
139
+ Do While FileName <> ""
140
+ attachObj.Add FileStorePath & "\" & FileName
141
+ fileCnt = fileCnt + 1 '★添付したファイル数
142
+ FileName = Dir()
143
+
144
+ FileName = Dir()
145
+ Loop
146
+
147
+ Set attachObj = Nothing
148
+
149
+ '★1以上のファイルを添付した場合Trueを返す
150
+ '(Boolean型の初期値はFalse)
151
+ If fileCnt > 0 Then FileAttach = True
152
+
153
+ End Function
154
+ ```

2

追記

2020/05/08 13:28

投稿

sinzou
sinzou

スコア392

answer CHANGED
@@ -61,4 +61,7 @@
61
61
  '★添付ファイルが存在する場合のみ、メールアイテムを作成する
62
62
  If FileAttach(attachObj) = True Then
63
63
 
64
- ```
64
+ ```
65
+ 追記2
66
+ ![イメージ説明](538bb27f482359f35336893ca44a2293.png)
67
+ Dim Col As Colsを宣言することによて、クラス名と先生氏名がぶら下がり、Col.クラス名とCol.先生氏名が使えるようになります。ステップ実行やブレークポイントで止めてColをクイックウォッチに登録すると右のようにColの下にクラス名 As Longと先生氏名 As Longがあるのがわかると思います。

1

追記

2020/05/08 13:07

投稿

sinzou
sinzou

スコア392

answer CHANGED
@@ -10,4 +10,55 @@
10
10
  FileStorePath = "C:\Outlookテスト\" & Cells(r,"D")& "先生\" & Cells(r,"E") & "\通知"
11
11
  ```
12
12
 
13
- とか
13
+ とか
14
+
15
+ 追記1
16
+ ほぼ完成かと、、keyword使わないので消したほうがいいですね
17
+
18
+ FileAttach
19
+ ```VBA
20
+ ' 処理① キーワードに合致するファイルを添付する
21
+ ' 処理② 1つ以上のファイルが見つかった場合、Trueを返す
22
+ Function FileAttach(attachObj As Object) As Boolean
23
+
24
+ Dim fileCnt As Long '★添付したファイル数をカウントする
25
+
26
+ Dim FileStorePath As String 'ファイル格納パス
27
+ FileStorePath = "C:\Outlookテスト\" & Cells(r, "D") & "先生\" & Cells(r, "E") & "\通知"
28
+
29
+ Dim FileName As String
30
+ FileName = Dir(FileStorePath & "\" & "*")
31
+
32
+ 'フォルダ内のファイル数、検索を繰り返す&"
33
+ Do While FileName <> ""
34
+ 'Debug.Print FileStorePath & "\" & FileName
35
+ attachObj.Add FileStorePath & "\" & FileName
36
+ fileCnt = fileCnt + 1 '★添付したファイル数
37
+ FileName = Dir()
38
+
39
+ Loop
40
+
41
+ Set attachObj = Nothing
42
+
43
+ '★1以上のファイルを添付した場合Trueを返す
44
+ '(Boolean型の初期値はFalse)
45
+ If fileCnt > 0 Then FileAttach = True
46
+
47
+ End Function
48
+ ```
49
+ main修正前
50
+ ```VBA
51
+ Dim keyword As String
52
+ keyword = Cells(r, col.添付キーワード)
53
+
54
+ '★添付ファイルが存在する場合のみ、メールアイテムを作成する
55
+ If FileAttach(attachObj, keyword) = True Then
56
+
57
+ ```
58
+ main修正後
59
+ ```VBA
60
+
61
+ '★添付ファイルが存在する場合のみ、メールアイテムを作成する
62
+ If FileAttach(attachObj) = True Then
63
+
64
+ ```