【VBA】Excelでメール内容を作成してOutlookを起動する
記事更新日:2022-10-23
毎回同じメール
ラクに
送りたい
ラクに
送りたい
クラスモジュールの作成
MailOpenクラスを作る
固定部分をクラスモジュールに記述します
Option Explicit
Private objOutlook As Object
Private objMail As Object
Private Sub Class_Initialize()
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.createitem(0)
End Sub
Public Sub Go( _
ByVal vTO As String, _
ByVal vCC As String, _
ByVal vSubject As String, _
ByVal vBody As String)
With objMail
.To = vTO
.cc = vCC
.Subject = vSubject
.body = vBody
.display
End With
End Sub
送信まですると危険なので、.displayで表示までにする
Excelシート3つにテーブルを作成する
次のテーブル名でテーブル作成
- tbl_body
- ボディテーブル
- 必要な行は、to, cc, subject, bodyFirst, bodyMain, bodyLast
- 定型文はここに入力しておく
- tbl_input
- 入力テーブル
- ボディテーブルの中で、内容を書き換えたい部分の入力用
- tbl_history
- 履歴テーブル
- メール作成するたびに履歴を残す
ボディテーブル
入力テーブル
履歴テーブル
テーブルにすると、呼び出しや値の取得がラクになるから
標準モジュールの作成
Option Explicit
Option Private Module
'bodyテーブルの行列番号
Private Enum b
rTO = 1
rCC
rSub
rBody1
rBody2
rBody3
col = 2
End Enum
'入力テーブルの行列番号
Private Enum i
rSub1 = 1
rSub2
rName
rText
col = 2
End Enum
'履歴テーブルの行列番号
Private Enum h
cDay = 1
cTO
cSub
cTxt
End Enum
Private sub1 As String
Private sub2 As String
Private name As String
Private text As String
Private myTO As String
Private myCC As String
Private mySubject As String
Private myBody As String
Public Sub CreateEmail()
'入力項目の取得
GetInputItem
'本文作成
MakeBody
'メールオープン
Dim MailOpen As MailOpen: Set MailOpen = New MailOpen
MailOpen.Go myTO, myCC, mySubject, myBody
'履歴作成
MakeHistory
End Sub
Private Sub GetInputItem()
With Range("tbl_input")
sub1 = .Cells(i.rSub1, i.col).Value
sub2 = .Cells(i.rSub2, i.col).Value
name = .Cells(i.rName, i.col).Value
text = .Cells(i.rText, i.col).Value
End With
End Sub
Private Sub MakeBody()
Dim bodyFirst As String
Dim bodyMain As String
Dim bodyLast As String
With Range("tbl_body")
myTO = .Cells(b.rTO, b.col)
myCC = .Cells(b.rCC, b.col)
mySubject = .Cells(b.rSub, b.col)
bodyFirst = .Cells(b.rBody1, b.col)
bodyMain = .Cells(b.rBody2, b.col)
bodyLast = .Cells(b.rBody3, b.col)
End With
'置き換え
mySubject = Replace(mySubject, "★", sub1)
mySubject = Replace(mySubject, "☆", sub2)
bodyFirst = Replace(bodyFirst, "★", name)
bodyMain = Replace(bodyMain, "★", text)
'※bodyMainに定型文がない(置き換えしない)場合
'bodyMain = text
'きれいな改行にするために、いったんvblf → 最後にvbcrlfに置き換える
myBody = bodyFirst & vbLf & vbLf & bodyMain & vbLf & vbLf & bodyLast
myBody = Replace(myBody, vbLf, vbCrLf)
End Sub
Private Sub MakeHistory()
With Range("tbl_hitstory")
.Cells(.Rows.Count + 1, h.cDay).Value = Date
.Cells(.Rows.Count + 1, h.cTO).Value = myTO
.Cells(.Rows.Count + 1, h.cSub).Value = mySubject
.Cells(.Rows.Count + 1, h.cTxt).Value = text
End With
End Sub
【宛先のメールアドレスを毎回変更する場合】
- アドレス一覧テーブルを作成する
- 何らかの方法で一覧からアドレスを取得する
- to欄にフィルタで選べるようにする
- コードでループさせる
- ユーザーフォームで選ぶ など
宛先ごとに別ファイルにして、宛先は固定にしてもいいかも
2022-10-23
編集後記:
この記事の内容がベストではないかもしれません。