前提
マクロを使って一斉送信できるようにしたいです。
以前、他のサイトの構文を参照しておりましたが残念ながらWindows10では非対応との
ことで下記のサイトを今回参照しております。
https://moripro.net/vba-outlook-attach/
実現したいこと
1.Excelに情報を入力
2.マクロを実行する
3.Excelの情報を基にメールを作成
###サイトからの変更事項
1)A列が"1"なら送信メールを作成する
2)B列に"添付"があれば、同ファイルの添付(シート名)をデスクトップに保存する
3)B列が"添付"のものは、2)で作成したファイルを添付する
**※**サイトではキーワードが一致した場合だけフォルダよりファイルを探して
メールに添付しております。
発生している問題・エラーメッセージ
a)コンパイルエラー:名前が適切でありません(col)
となります。
b)3)の変更で
問題点①:B列に"添付"がひとつでもあったらという構文(IF?)の作り方、挿入場所が分かりません
問題点②:ユーザー名やWindowsのバージョンにかかわらずデスクトップにあるファイルのパスをどのように書いてよいのか分かりません
問題点③:送信メールへの添付の構文の書き方が分かりません
ファイル様式
該当のソースコード
サイトより一部修正しております。
Enum col '1以降の数値を省略した場合は+1される 送信 = 1 添付 宛名 アドレス1 アドレス2 担当者 摘要 End Enum Sub main() 'Outlookオブジェクトの作成 Dim OutlookObj As Outlook.Application Set OutlookObj = New Outlook.Application Dim r As Long For r = 2 To Cells(1, 4).End(xlDown).Row 'メールアイテムオブジェクト作成 Dim mailItemObj As Outlook.MailItem Set mailItemObj = OutlookObj.CreateItem(olMailItem) '添付ファイルオブジェクトの生成 Dim attachObj As Outlook.Attachments Set attachObj = mailItemObj.Attachments Dim keyword As String keyword = Cells(r, col.添付キーワード) '★添付ファイルが存在する場合のみ、メールアイテムを作成する If FileAttach(attachObj, keyword) = True Then If Cells(r, 1).Value = 1 Then If Cells(r, 2).Value = "添付" Then 'メール本文作成 Dim mailBody As String mailBody = CreateMailBody(r) 'メールアイテム作成 With mailItemObj .To = Cells(r, col.アドレス1).Value .CC = Cells(r, col.アドレス2).Value .Subject = Cells(1, "K").Value '件名 .Body = mailBody '本文 End With End If End If mailItemObj.Display '下書きを表示 '次のメールアイテムを作成するためいったん破棄 Set mailItemObj = Nothing End If Next r End Sub ' 【機能】Excelシート上の指定行番号のメール本文を作成する Function CreateMailBody(r As Long) As String Dim sName As String, DayOfUse As String, price As Long sName = Cells(r, col.氏名).Value Personnel = Cells(r, col.担当者).Value Summary = Cells(r, col.摘要).Value Dim sign As String '署名 sign = Cells(12, "K").Value Dim mBody As String 'メール本文 mBody = Cells(2, "J").Value '初期値を設定 mBody = Replace(mBody, "(氏名)", sName) mBody = Replace(mBody, "(担当者)", Personnel) mBody = Replace(mBody, "(適用)", Summary) mBody = mBody & vbCrLf & vbCrLf & sign '末尾に署名を付与 CreateMailBody = mBody End Function ' 処理① キーワードに合致するファイルを添付する ' 処理② 1つ以上のファイルが見つかった場合、Trueを返す Function FileAttach(attachObj As Object, keyword As String) As Boolean Dim fileCnt As Long '★添付したファイル数をカウントする Dim FileStorePath As String 'ファイル格納パス FileStorePath = "C:\Outlookテスト\file" Dim FileName As String FileName = Dir(FileStorePath & "\" & "*") 'フォルダ内のファイル数、検索を繰り返す&" Do While FileName <> "" 'キーワードを含むファイルが見つかったら、下書きアイテムに添付する If InStr(FileName, keyword) > 0 Then attachObj.Add FileStorePath & "\" & FileName fileCnt = fileCnt + 1 '★添付したファイル数 End If FileName = Dir() Loop Set attachObj = Nothing '★1以上のファイルを添付した場合Trueを返す '(Boolean型の初期値はFalse) If fileCnt > 0 Then FileAttach = True End Function
試したこと
1)A列が"1"なら送信メールを作成する
If Cells(r, 1).Value = 1 Then
End If を使用
2)デスクトップにファイルを作成できましたが開いたままとなってしまいました
Sheets("添付").Copy ActiveWorkbook.SaveAs _ FileName:=Ps & "\" & "添付", _ FileFormat:=xlOpenXMLWorkbook
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/19 03:51
2020/02/19 04:49
2020/02/19 08:05
2020/02/20 00:14
2020/02/20 00:34
2020/02/20 03:36
2020/02/20 03:53
2020/02/20 05:12
2020/02/20 07:32
2020/02/21 04:07
2020/02/21 08:02