回答編集履歴

2

追記

2020/04/07 03:07

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -133,3 +133,135 @@
133
133
  とかどうですか?英語が苦手なのでおかしなことを書いているかもですが^^;
134
134
 
135
135
  お好みで^^
136
+
137
+
138
+
139
+ ---
140
+
141
+ > ⓵最初のwsMailがobjMailで何故動作するのか、
142
+
143
+ > ②24行目と29行目の.Rangeの前にwsMailをつけるのは何故なのか
144
+
145
+
146
+
147
+ Set wsMail = ThisWorkbook.Sheets("メール内容")
148
+
149
+
150
+
151
+ ↑ここで、エクセルのシートそのものを変数に代入しています。
152
+
153
+
154
+
155
+ Set objMail = objOutlook.CreateItem(olMailItem)
156
+
157
+
158
+
159
+ ↑ここで、アウトルックのメール(?)そのものを変数に代入しています。
160
+
161
+
162
+
163
+ なので、エクセルのシート上の値を読むときは、
164
+
165
+
166
+
167
+
168
+
169
+ wsMail.Range("B1").Value
170
+
171
+ (変数に入っている)シートの中の指定するセル(B1セル)の値
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+ objMail.Subject
180
+
181
+ (変数に入っている)メールの件名
182
+
183
+
184
+
185
+ に渡したいなら
186
+
187
+ objMail.Subject = wsMail.Range("B1").Value
188
+
189
+
190
+
191
+ とイコールつなぐと右辺から左辺へ代入
192
+
193
+ という意味になります。
194
+
195
+
196
+
197
+ With が曲者ですね。理解をするのに妨げになってます。
198
+
199
+
200
+
201
+ With でオブジェクト(≒操作対象そのもの)を示したとき、
202
+
203
+ .To
204
+
205
+ は、
206
+
207
+ その宛先
208
+
209
+ .Subject
210
+
211
+ は、
212
+
213
+ その件名
214
+
215
+
216
+
217
+ というような意味になります。
218
+
219
+ なので、
220
+
221
+
222
+
223
+ ```VBA
224
+
225
+
226
+
227
+ objMail.To = wsList.Cells(i, 4).Value 'メール宛先
228
+
229
+ objMail.Subject = wsMail.Range("B1").Value 'メール件名
230
+
231
+ objMail.BodyFormat = olFormatPlain 'メールの形式
232
+
233
+ objMail.Body = wsList.Cells(i, 1).Value & vbCrLf & _
234
+
235
+ wsList.Cells(i, 2).Value & " " & _
236
+
237
+ wsList.Cells(i, 3).Value & " 様" & vbCrLf & vbCrLf & _
238
+
239
+ wsMail.Range("B2").Value 'メール本文
240
+
241
+ objMail.Send
242
+
243
+ ```
244
+
245
+
246
+
247
+ こう書いても同じ意味になります。
248
+
249
+ 対象が同じなら省略しちゃえってことですね。
250
+
251
+ wsList と
252
+
253
+ wsMail とには、
254
+
255
+ 当然違うシートが代入されていますから、
256
+
257
+ どっちのシートの話をするのかちゃんと書かないといけないことになります。
258
+
259
+
260
+
261
+ どの操作対象に対してどんなことをしたいかを明示しなければ、
262
+
263
+ 命令を受ける人は、「解らない!」と投げ出す(エラーを返す)か、
264
+
265
+ 忖度して適当なことをして返す(間違ったことをする)かどっちかなので、
266
+
267
+ しっかり明言して命令することが肝要です。

1

追記

2020/04/07 03:07

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -77,3 +77,59 @@
77
77
  End With
78
78
 
79
79
  ```
80
+
81
+
82
+
83
+ ---
84
+
85
+ > すると、今度は24行目
86
+
87
+ >
88
+
89
+ > .Subject = .Range("B1").Value 'メール件名
90
+
91
+ >
92
+
93
+ > で、438エラー
94
+
95
+ >
96
+
97
+ > (オブジェクトは、このプロパティまたはメソッドをサポートしていません)
98
+
99
+ >
100
+
101
+ > が出ました。
102
+
103
+
104
+
105
+ 当然Rangeは、メールのメンバーではないので、
106
+
107
+ エラーになりますね。
108
+
109
+ 今回は実行時エラーなので、コンパイルだけでは発見できませんでした。
110
+
111
+
112
+
113
+ .Subject = wsMail.Range("B1").Value
114
+
115
+
116
+
117
+ エクセルのシートのセルの値を、メールの件名(?)に渡すのですよね?
118
+
119
+ この辺も手打ちで意識して書いていたら間違えない部分です。
120
+
121
+
122
+
123
+ 変数名が似ていて間違いやすいかも?
124
+
125
+ かといって僕もそう書くかもしれませんが、、、、
126
+
127
+ wsMail
128
+
129
+  ↓
130
+
131
+ wsMailSource
132
+
133
+ とかどうですか?英語が苦手なのでおかしなことを書いているかもですが^^;
134
+
135
+ お好みで^^