質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

0回答

644閲覧

vbaでメール(Outlook.Application)を作成する際にファイル名を変更して添付したい

SugiuraY

総合スコア318

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/11/02 22:56

下記のようなコードを作り、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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ken3memo

2021/11/03 10:21 編集

添付ファイル名を変える方法が探せなかったので(でも、くやしいので変な妄想を書き込みます) '--- 添付ファイルを設定 ---' 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に作られる可能性があるから、消さないでほったらかしもできないし。 テストしていないので、変な切り口のアイデアだけ・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問