下記のようなコードを作り、csvに記載のある情報をもとに自動的にメールを作成することができました。
ここで、' here
にあるパスに1.pdf
のような形式でファイルが存在していて、Cells(i, 11).Value
に1というユニークな情報をもっているため、適切なファイルを添付できております。
ここで、ご質問なのですが、この添付する過程において、具体的にはSub prepare()
のobjMail.Attachments.Add(attachmentPath)
の過程になると思いますが、ファイル名を変更して添付することは可能でしょうか?
例えば、添付するファイル名は、title + ".pdf"
、つまりCells(i, 9).Value + ".pdf"
の形で添付しつつ、フォルダのオリジナルのファイルは1.pdf
のままにしておきたいと考えております。
調べてもここだけやり方を見つけることができずアドバイスを頂ければ幸いです。
宜しくお願い申し上げます。
vba
1Sub mail() 2 Dim i As Integer 3 Dim title As String 4 Dim path As String 5 Dim toadress As String 6 Dim ccadress As String 7 Dim body As String 8 9 Dim startTime As Double 10 Dim endTime As Double 11 Dim processTime As Double 12 13 startTime = Timer 14 15 i = 3 16 Do 17 title = Cells(i, 9).Value 18 path = ThisWorkbook.path & "\src\" & Cells(i, 11).Value & ".pdf" ' here 19 toadress = Cells(11, 4).Value 20 ccadress = Cells(12, 4).Value 21 body = "番号:" & Cells(i, 11).Value & vbCrLf & "取引先:" & Cells(i, 12).Value & vbCrLf & "CostCenter:" & Cells(i, 13).Value 22 If title = "" Then 23 Exit Do 24 End If 25 26 Call prepare(title, path, toadress, ccadress, body) 27 28 i = i + 1 29 30 Loop 31 endTime = Timer 32 processTime = endTime - startTime 33 MsgBox "処理が完了しました、処理時間は" & Round(processTime, 1) & "秒でした(・ε・)ノシ" 34End Sub 35 36Sub prepare(subjectStr As String, attachmentPath As String, toad As String, ccad As String, body As String) 37 '--- Outlook操作のオブジェクト ---' 38 Dim objOutlook As Object 39 Set objOutlook = New Outlook.Application 40 41 '--- メールオブジェクト ---' 42 Dim objMail As Object 43 Set objMail = objOutlook.CreateItem(olMailItem) 44 45 '--- メールの内容を格納する変数 ---' 46 Dim toStr As String 47 Dim ccStr As String 48 Dim bodyStr As String 49 50 '--- 条件を設定 ---' 51 objMail.to = toad 52 objMail.cc = ccad 53 objMail.Subject = subjectStr 54 objMail.BodyFormat = olFormatPlain 'テキスト形式 55 objMail.body = body 56 57 '--- 添付ファイルを設定 ---' 58 Call objMail.Attachments.Add(attachmentPath) 59 60 '--- メールを表示 ---' 61 objMail.Display 62 63 64End Sub
添付ファイル名を変える方法が探せなかったので(でも、くやしいので変な妄想を書き込みます)
'--- 添付ファイルを設定 ---'
Call objMail.Attachments.Add(attachmentPath)
ファイル名をコピーしてから、添付後消すとか?
'--- 添付ファイルを設定 ---'
FileCopy attachmentPath, "C:\TEMP\" & subjectStr & ".pdf" '添付前にコピーする、別名保存じゃないけど
Call objMail.Attachments.Add("C:\TEMP\" & subjectStr & ".pdf" )
Kill "C:\TEMP\" & subjectStr & ".pdf" '↑コピーした添付ファイルを消す、添付後に添付元をすぐに消しても送信できるのか?疑問・テストが必要ですが
あっ、タイミング的に送信前にコピーした添付ファイルが消されると?どうなるんだろう?
消さないで、残しておくか(送信後にまとめて消すか?)でも連続処理で、同じ title のファイル名で違う中身がTEMPに作られる可能性があるから、消さないでほったらかしもできないし。
テストしていないので、変な切り口のアイデアだけ・・・
あなたの回答
tips
プレビュー