Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Microsoft 365)
シートに記載している宛先一覧にてメールを作成保管する方法について
投稿日時: 23/06/02 17:18:18
投稿者: takatada72

●Excelから、シートに記載されている一覧を使って、メールを作成して下書きに保管
するようなものを作りたいと考えております。
 
・シート名:メール作成保管
・B2=件名、B3=提携本文が記載しております。(内容の中に、<送り先1>、<送り先2>があり、6行目からのD列:<送り先1>とE列<送り先2>のデータが差し込まれるようにしたいのです。・C3には、署名があります。
・6行目から宛先別のデータ一覧があります。
A列=メインのアドレス、B列=CCのアドレス、C列=BCCのアドレス、D列=送り先1に貼り付ける内容、E列=<送り先2に貼り付ける内容、F列=添付ファイルのPATHがあります。
※各行によって、メインアドレス、CCアドレス、BCCアドレス、送り先1、送り先2、添付ファイルを
それぞれのメールに適用させたいと考えております。
 
▲;下記のコードを実行すると、下書きに、メールは、作られるのですが、本文の<送り先1>、<送り先2>にD列、E列の内容が差し込まれません。署名が崩れてしまいます。下記コードをどのように修正したら良いのでしょうか
 
質問が下手なため、わかりにくいかと思いますが、ご指摘頂きながら、進行できれば良いと思っております。
宜しくお願い致します。
 
■件名(B2):「件名テスト」
 
■本文(B3):
<送り先1>送り先1
<送り先2>さま
 
 
ただいま、テスト中
二行目の書き込みテスト
三行目の書き込みテスト、明日の時間、明後日の時間
 
■署名(C3):
****************************
    株式会社名
    部署名 課名
    担当者 指名
    郵便番号 住所
    担当者の電話番号
    担当者のFAX番号
******************************"
 
 
 
 
●●●●●●●●●●●●下記VBA●●●●●●●●●●●●●
Dim oApp As New Outlook.Application
Dim oItem As Outlook.MailItem
 
Dim WSH As Object
Set WSH = CreateObject("Wscript.Shell")
Dim DesktopPath As String
DesktopPath = WSH.SpecialFolders("Desktop")
 
Dim 本文 As String, 件名 As String, 署名 As String
Dim 宛先列番号 As Long
Dim i, k, x
 
 
'Cells(1, 4) = "●": Stop
i = 6
Do Until Cells(i, 2) = ""
If Cells(i, 21) = "" Then
件名 = Cells(2, 2).Text
本文 = Cells(3, 2).Text
署名 = Cells(3, 3).Text
 
k = 5
'MsgBox 件名
'MsgBox 本文
 
Do Until Cells(6, k) = ""
件名 = Replace(件名, "<" & Cells(6, k) & ">", Cells(i, k))
本文 = Replace(本文, "<" & Cells(6, k) & ">", Cells(i, k))
署名 = Replace(署名, "<" & Cells(6, k) & ">", Cells(i, k))
 
k = k + 1
Loop
本文 = Replace(本文, vbLf, "<br />") 'HTMLが含まれたメッセージ
'MsgBox 本文: Stop
 
Set oItem = oApp.CreateItem(olMailItem)
 
'送信元を変更する場合、下記の行を有効にしてアカウント名を入力(Microsoft Outlook ○○ Object Library」を有効必須
'oItem.SendUsingAccount = Session.Accounts(“アカウント名”)
oItem.To = Replace(Cells(i, 1), vbLf, ";")
oItem.subject = 件名
'署名 = "<p style='font-size:14pt; font-weight:bold;'>" & 署名 & "</p>"
oItem.HTMLBody = "" & 本文 & "<br />" & Replace(署名, vbCrLf, "") & ""
 
oItem.CC = Replace(Cells(i, 2), vbLf, ";")
oItem.BCC = Replace(Cells(i, 3), vbLf, ";")
'oItem.Importance = olImportanceHigh
 
Dim 添付()
x = 0
ReDim Preserve 添付(x)
添付(x) = Cells(i, 6).Text
 
If 添付(x) <> "" Then
Select Case InStr(添付(x), vbLf)
Case Is = 0
oItem.Attachments.Add 添付(x)
Case Else
Do Until InStr(添付(x), vbLf) = 0
x = x + 1
ReDim Preserve 添付(x)
添付(x) = Mid(添付(x - 1), InStr(添付(x - 1), vbLf) + 1)
添付(x - 1) = Left(添付(x - 1), InStr(添付(x - 1), vbLf) - 1)
If 添付(x - 1) <> "" Then
oItem.Attachments.Add 添付(x - 1)
End If
Loop
If 添付(x) <> "" Then
oItem.Attachments.Add 添付(x)
End If
End Select
 
End If
 
oItem.Display '送信せずに画面を表示する
oItem.Save '下書き保存
oItem.Close 0 '閉じる
'oItem.Send ’送る場合
 
End If
 
i = i + 1
Loop
MsgBox "下書きに保管されました。"

投稿日時: 23/06/05 15:55:12
投稿者: takatada72

お疲れさまです。
 
構図が若干代わりましたが、下記のようにネットから探して修正してみました。
結果、私が求めている内容になりましたので解決とさせて頂きました。
 
Dim oApp As New Outlook.Application
Dim oItem As Outlook.MailItem
 
Dim WSH As Object
Set WSH = CreateObject("Wscript.Shell")
Dim DesktopPath As String
DesktopPath = WSH.SpecialFolders("Desktop")
 
Dim 本文 As String, 件名 As String
Dim 宛先列番号 As Long
Dim i, k, x
 
i = 7
Do Until Cells(i, 2) = ""
If Cells(i, 21) = "" Then
件名 = Cells(2, 2).Text
本文 = Cells(3, 2).Text
k = 5
Do Until Cells(6, k) = ""
件名 = Replace(件名, "<" & Cells(6, k) & ">", Cells(i, k))
本文 = Replace(本文, "<" & Cells(6, k) & ">", Cells(i, k))
k = k + 1
Loop
本文 = Replace(本文, vbLf, "<br />")
 
Set oItem = oApp.CreateItem(olMailItem)
 
oItem.To = Replace(Cells(i, 2), vbLf, ";")
oItem.subject = 件名
oItem.HTMLBody = "" & 本文 & ""
 
oItem.CC = Replace(Cells(i, 3), vbLf, ";")
oItem.BCC = Replace(Cells(i, 4), vbLf, ";")
 
Dim 添付()
x = 0
ReDim Preserve 添付(x)
添付(x) = Cells(i, 20).Text
 
If 添付(x) <> "" Then
Select Case InStr(添付(x), vbLf)
Case Is = 0
oItem.Attachments.Add 添付(x)
Case Else
Do Until InStr(添付(x), vbLf) = 0
x = x + 1
ReDim Preserve 添付(x)
添付(x) = Mid(添付(x - 1), InStr(添付(x - 1), vbLf) + 1)
添付(x - 1) = Left(添付(x - 1), InStr(添付(x - 1), vbLf) - 1)
If 添付(x - 1) <> "" Then
oItem.Attachments.Add 添付(x - 1)
End If
Loop
If 添付(x) <> "" Then
oItem.Attachments.Add 添付(x)
End If
End Select
 
End If
 
oItem.Save '下書き保存
 
End If
 
i = i + 1
Loop
End Sub