
お世話になります。
メールの定期配信業務があり、簡略化のためマクロ作成しております。
WSHを使った構文を見つけましたので、以下のような構文を作りました。
<エクセルシート>
横に【宛先1(to)】【宛先2(cc)】【件名】【本文】【添付ファイルパス】
の順に並んでおり、列方向にはリストとなっています。
<Module>
Sub メール書き込み()
Dim 宛先1 As String
Dim 件名 As String
Dim 本文 As String
Dim 添付 As String
Dim 宛先2 As String
Dim 行 As Long, 行下端 As Long
Dim sComd As String
行下端 = Range("B65536").End(xlUp).Row
行 = 2
Do While 行 <= 行下端
宛先1 = Cells(行, 1).Text
宛先2 = Cells(行, 2).Text
件名 = Cells(行, 3).Text
本文 = Cells(行, 4).Value
添付 = Cells(行, 5).Text
sComd = "Mailto:" & 宛先1 & "?Subject=" & 件名 & "&body=" & 本文
Debug.Print sComd
CreateObject("WScript.Shell").Run sComd
行 = 行 + 1
Loop
End Sub
この状態で、複数メールを作成することはできましたが、不満点があり、御教示願いたく考えております。
mailto 以下の書き方が分からず困っているのが以下の点です。
1、CC(宛先2)を追加したい。
2、添付を追加したい。
また、本文の改行も反映できるようにしたいのですが、これは可能でしょうか?
複数件質問になってしまい恐縮ですが、よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
#1です。
#1のコードで
sComd = "Mailto:" & 宛先1 & "?cc=" & 宛先2 & "&Subject=" & 件名 & "&body=" & 本文
CreateObject("WScript.Shell").Run sComd
とすると「CC」が加わりました。
ご回答、ありがとうございます!
vbCrLfで改行できない旨、冒頭に記載すべきでした。
お手間をとらせてしまい、申し訳ありませんでした。
おかげさまで、ほぼ希望する形になりました。
早速色々と試してみましたが、ご指摘の通り、自動改行には
こだわらない方がよさそうですね。
No.3
- 回答日時:
#2のお礼に関して
>vbCrLfで改行できない旨、冒頭に記載すべきでした
それで#1の回答の
s = s & Mid(本文, st, p - st + 1) & "%0D%0A"
にしてやってくれましたでしょうね。
#1+#2が本来の回答ですが、1つずつ、つぶして(テストして)いったので。
ーー
添付ファイルの件は、情報が少なくて。
WSHのMailToでは出来なくて、手動になるのかもしれません。
http://www.moug.net/faq/viewtopic.php?t=38325
の
>OutlookExpressの場合、添付ファイルは指定できなかったと思いますので
と歯切れが悪い。
ーー
メイル送信は
BASP21やCDOなど色々有るようなのでそっちの利用を検討しては。
==
http://www.nobotan.net/script/index.html
こんな記事も見つかりましたよ。フリーソフト。ファイル添付も可能らしい。
ご回答ありがとうございます。
添付ファイルの件、私の方も色々探してみたものの、未だ発見できません。
しかしながら、今回のマクロはメールの宛先・件名・本文までを作成して
メール送信の直前で止まるものですので、ご指摘のように手動で対応して
いきたいと思います。
CDOについては、すごく簡単なものがありましたが、送信者(自分)を
簡単に変更できる(いわば、偽装できてしまう)部分があり、
同様の業務を行っている人に、このマクロを提供することが難しいと考え、
とりあえずは、ファイルを渡すだけで動作してくれるものを、と
考えていた次第です。
No.1
- 回答日時:
>本文の改行も反映できるようにしたいのですが
をやってみました。
簡単にvbCrLfを挟んだら仕舞いと思っていたが、そうは行かず、調べて下記も1方法でしょう。面倒なものですね。
メイル発信のテスト上、繰り返しせず。第2行目しか実行しないように変えてます。
ロジックは句読点(の句点「。」)で全て改行するようにしてます。
文字数で改行するとかのロジック・コードは可能です。
人間が判断して、目じるしの/など入れて/を改行に置き換えるのも可能です。自動改行に余り凝らないほうがよさそう。
ーーー
Sub メール書き込み()
Dim 宛先1 As String
Dim 件名 As String
Dim 本文 As String
Dim 添付 As String
Dim 宛先2 As String
Dim 行 As Long, 行下端 As Long
Dim sComd As String
行下端 = Range("B65536").End(xlUp).Row
行 = 2
'--
'Do While 行 <= 行下端
宛先1 = Cells(行, "A")
宛先2 = Cells(行, "B")
件名 = Cells(行, "C")
本文 = Cells(行, "D")
添付 = Cells(行, "E")
s = ""
st = 1
Do
p = InStr(st, 本文, "。")
If p = 0 Then Exit Do
s = s & Mid(本文, st, p - st + 1) & "%0D%0A" 'vbCrLf
st = p + 1
Loop
本文 = s
'--
sComd = "Mailto:" & 宛先1 & "?Subject=" & 件名 & "&body=" & 本文
CreateObject("WScript.Shell").Run sComd
行 = 行 + 1
'Loop
'---
End Sub
ーーー
なおINSTR関数を使っているが、Replaceメソッドでも可能です。こちらが簡単かな。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メールの宛先の「リソース」とは
-
Wordの差し込み印刷でのフィル...
-
宛先の名前の後に「、」がつく
-
Outlook で宛先が複数の場合の人数
-
迷惑メールの遮断法
-
宛先の順番が入れ替わってしまう。
-
CCを日本語で言うと?
-
メールが戻ってくるエラーの意味
-
Outlookで自分(Outlookのメルア...
-
ACCESS2010 レポートを分割しP...
-
Outlookで[全員に返信]をクリッ...
-
アンダーバーが表示されない
-
Outlook Express 受信時間が長...
-
Outlookの転送は、PC起動してい...
-
「Thunderbirdメール」の送信文...
-
OUTLOOK ハイパーリンク返信時...
-
メーラー Becky! ベッキーの表...
-
送信者不明 件名なしメールは...
-
CC、BCCにだけアドレスが...
-
受信トレイの件名が表示されな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メールの宛先の「リソース」とは
-
CCを日本語で言うと?
-
宛先の順番が入れ替わってしまう。
-
宛先が、recipients not specif...
-
Outlook で宛先が複数の場合の人数
-
Outlook2019の宛先表示について
-
Outlookで[全員に返信]をクリッ...
-
ACCESS2000のレポートのコント...
-
Wordの差し込み印刷でのフィル...
-
迷惑メールの遮断法
-
ACCESS2010 レポートを分割しP...
-
アンダーバーが表示されない
-
宛先の名前の後に「、」がつく
-
宛先・cc・Bccをグループ化し...
-
Outlookで自分(Outlookのメルア...
-
メーラーのThunderbirdの送信機...
-
ACCESSで自動でメールをおくる...
-
VBAです。OUTLOOKでウンドウを選択
-
EXCELマクロで複数のEMAIL宛先...
-
宛先とCCの違いは何でしょうか。
おすすめ情報