重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になります。
メールの定期配信業務があり、簡略化のためマクロ作成しております。

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、添付を追加したい。

また、本文の改行も反映できるようにしたいのですが、これは可能でしょうか?

複数件質問になってしまい恐縮ですが、よろしくお願い致します。

A 回答 (3件)

#1です。


#1のコードで
sComd = "Mailto:" & 宛先1 & "?cc=" & 宛先2 & "&Subject=" & 件名 & "&body=" & 本文
CreateObject("WScript.Shell").Run sComd
とすると「CC」が加わりました。
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます!

vbCrLfで改行できない旨、冒頭に記載すべきでした。
お手間をとらせてしまい、申し訳ありませんでした。

おかげさまで、ほぼ希望する形になりました。
早速色々と試してみましたが、ご指摘の通り、自動改行には
こだわらない方がよさそうですね。

お礼日時:2009/06/23 15:55

#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
こんな記事も見つかりましたよ。フリーソフト。ファイル添付も可能らしい。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

添付ファイルの件、私の方も色々探してみたものの、未だ発見できません。
しかしながら、今回のマクロはメールの宛先・件名・本文までを作成して
メール送信の直前で止まるものですので、ご指摘のように手動で対応して
いきたいと思います。

CDOについては、すごく簡単なものがありましたが、送信者(自分)を
簡単に変更できる(いわば、偽装できてしまう)部分があり、
同様の業務を行っている人に、このマクロを提供することが難しいと考え、
とりあえずは、ファイルを渡すだけで動作してくれるものを、と
考えていた次第です。

お礼日時:2009/06/24 09:24

>本文の改行も反映できるようにしたいのですが


をやってみました。
簡単に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メソッドでも可能です。こちらが簡単かな。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!