🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

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

Q&A

解決済

2回答

28249閲覧

VBAでOutlookのメール作成で送信者名と署名を自動で挿入したい

fulogabc

総合スコア11

VBA

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

0グッド

0クリップ

投稿2019/11/13 13:43

編集2019/11/14 00:30

VBAでエクセル内容からメールを作成するようなコードを書いていますが、送信者名の挿入と、署名の挿入ができずにいます、、、

送信者(From)が不特定のため、事前に形式を挿入するのではなく、メール作成時に自動で「送信者名」と「送信者の署名」を取得し、本文に記述したいです。

https://docs.microsoft.com/ja-JP/office/vba/api/Outlook.MailItem.SenderName

ここを見る限り、送信者は「取得のみ」で設定はできないような雰囲気が感じられますが、なにか別の方法で設定、することはできるでしょうか?

①本文冒頭に「お疲れ様です。○○です。」と送信者名を入れたい。
②本文末に署名を自動で入れたい。

下のようなコードを書いています。

vba

1Sub Outlookメール作成() 2 3'---コード1|outlookを起動する 4 Dim outlookObj As Outlook.Application 'Outlookで使用するオブジェクト生成 5 Dim mailItemObj As Outlook.MailItem 'Outlookで使用するオブジェクト生成 6 7 8 9 10'---コード2|メールを作成して、差出人、本文、署名を入れ込む--- 11 Set outlookObj = CreateObject("Outlook.Application") 12 Set mailItemObj = outlookObj.CreateItem(olMailItem) 13 mailItemObj.BodyFormat = 3 'リッチテキストに変更 14 mailItemObj.To = "test@gmail.com" 'to宛先をセット 15 mailItemObj.CC = "test@gmail.com" 'cc宛先をセット 16 mailItemObj.BCC = "test@gmail.com" 'bcc宛先をセット 17 mailItemObj.subject = "件名" '件名をセット 18 19 20'本文をセット 21 mailItemObj.body = "お疲れ様です。○○です。本文の内容はエクセルから取得。エクセルは保護されており、加工は不可。送信者は不特定多数になる。最後に署名をセットしたい" 22 23 24 '---コード3|メールを送信する--- 25 'mailItemObj.Save '下書き保存 26 mailItemObj.Display 'メール表示(ここでは誤送信を防ぐために表示だけにして、メール送信はしない) 27 28 29'---コード4|outlookを閉じる(オブジェクトの解放)--- 30 Set outlookObj = Nothing 31 Set mailItemObj = Nothing 32 33 34End Sub 35

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

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

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

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

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

guest

回答2

0

bodyに代入するときに、差出人名や署名を連結して代入すればいいだけでは?

投稿2019/11/13 13:56

otn

総合スコア85893

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

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

fulogabc

2019/11/13 14:16

すみません、初心者で具体的なコードがうまく動作しません、、、 コードを教えていただくことはできますか?
otn

2019/11/13 14:20

mailItemObj.body = "ここに本文に入れたい文字列を全部書く"
fulogabc

2019/11/13 14:22

送信者が不特定多数のため、署名も様々、名前も様々、のため自動取得したいのですが、この形だと固定の形式にならないでしょうか?
otn

2019/11/13 14:35 編集

連結して代入と書いた通りです。 文字列を表す式 & 文字列を表す式 で、文字列を連結できます。
fulogabc

2019/11/13 15:11

Sendernameが読み取り専用のため、設定できないと思いますが、違うでしょうか?
otn

2019/11/13 15:51

bodyに設定するんでしょ? Sendernameに設定したい意味が分かりません。
fulogabc

2019/11/14 00:26

送信者(From)が限定できず、その時によって変わる場合、Bodyに事前に送信者名や署名を挿入することができないと思いますが、、、 Bodyに入れる=固定される と思っています そのため、その時の送信者名と署名を、メール作成時に自動で取得し、bodyに入れたいのです。 そして送信者名を取得するためにSendernameが必要だと思っていましたが、これが読み取り専用でできないように思えます。 うまく伝わらずすみません。
otn

2019/11/14 01:00

mailItemObj.body = "お疲れ様です。" & mailItemObj.Sendername & ”です。本文の内容は~~~" なんか、プログラミングの基本が出来ていないように思います。
otn

2019/11/14 15:51

ああ、mailItemObj って、新規作成したメールでしたか。 Outlook.MailItem.SenderName とお書きだったので、参照したいメールかと勘違いしていました。 送信者名はどこからとってくるのですか?Excelデータからですか? あるいは、今VBAを動かしているOutlookのアカウントですか? 後者なら、https://docs.microsoft.com/ja-JP/office/vba/api/outlook.account を参考にして取得してください。
guest

0

自己解決

VBA

1'送信者名 2Dim strsousin As String 3 4'送信者名をOutlookオブジェクトで取得 5Dim olkApp As Object 6Set olkApp = CreateObject("Outlook.Application") 7Dim olAccounts 8Set olAccounts = olkApp.Session.Accounts 9 10strsousin = olAccounts(1).CurrentUser 11 12'メッセージボックスで表示 13MsgBox olAccounts(1).CurrentUser

投稿2020/02/07 14:33

fulogabc

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問