<Outlookから複数のアドレスにBCC送信>
こんにちは、 今月は読者減らさないようにがんばろう と 思っている。 三流プログラマーKen3です。 そして、今日の発行でまた減って行く、、 なんていつもの暗い前置きは置いといて、 今回は、 Outlookから複数のアドレスにBCC送信 を軽く書きたいと思います。 へぇ〜、そうなんだぁ程度に、気楽に読んでください。 /* * 1.今回のキッカケ */ In message "質問", 初心者 さん wrote... >EXCELからOUTLOOKを起動してEXCELシートに書かれている複数のアドレスにBCC >で送信していんですが、どうしたらいいんですか? ---- BCC送信かぁ、、、 タイトルが質問で名前が初心者かぁ。 メールの送り元はdion.ne.jpで@Hotmail.comかぁ なんて関係無いことは置いといて、 /* * 2.質問元のサンプル */ 前回と同じだけど(行数、ボリューム稼ぎしてもイミ無いから参照にしろって?) Sub testSEND送信() Dim oApp As Object 'アプリケーションオブジェクト Dim objMAIL As Object 'メールのオブジェクト Dim strMOJI As String '本文 'アプリケーションオブジェクトの作成 Set oApp = CreateObject("Outlook.Application") Set objMAIL = oApp.CreateItem(0) 'olMailItem=0 strMOJI = "こんにちは" & vbCrLf _ & "プログラマーの愚痴、教えまっせ?" & vbCrLf _ & "http://www.ken3.org/ よろしく(笑)" objMAIL.To = "test@ken3.org" '宛先 objMAIL.Subject = "未承諾広告※(笑)" '件名 objMAIL.Body = strMOJI '本文の代入 objMAIL.Send '直接送信箱行き 'おまけでOutlook表示 Dim myNameSpace As Object Dim myFolder As Object Set myNameSpace = oApp.GetNameSpace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダーを指定 myFolder.Display '表示 End Sub まず、アプリケーションオブジェクトの作成 Set oApp = CreateObject("Outlook.Application") 次に、メールアイテムを作成します。 Set objMAIL = oApp.CreateItem(0) 'olMailItem=0 本文を一時的に変数に保管して(直接でもいいですよ) strMOJI = "こんにちは" & vbCrLf _ & "プログラマーの愚痴、教えまっせ?" & vbCrLf _ & "http://www.ken3.org/ よろしく(笑)" こんな感じで、vbCrLfの改行を使って、作成してます。 データをメールアイテムにセットする objMAIL.To = "test@ken3.org" '宛先 objMAIL.Subject = "未承諾広告※(笑)" '件名 objMAIL.Body = strMOJI '本文の代入 見たまま?で、 .To 宛先 .Subject 件名 .Body 本文 をセットしてます。 objMAIL.Send '直接送信箱行き の.Sendプロパティです。 これで送信箱に行きます。 と送信箱にメールを保存しました。 /* * 3.BCCの複数宛先指定 */ やりたいことは、BCCで複数の宛先を指定することなので、 .TOを.BCCに変えただけです。 Sub testBCC送信() Dim oApp As Object 'アプリケーションオブジェクト Dim objMAIL As Object 'メールのオブジェクト Dim strMOJI As String '本文 'アプリケーションオブジェクトの作成 Set oApp = CreateObject("Outlook.Application") Set objMAIL = oApp.CreateItem(0) 'olMailItem=0 strMOJI = "こんにちは" & vbCrLf _ & "プログラマーの愚痴、教えまっせ?" & vbCrLf _ & "http://www.ken3.org/ よろしく(笑)" objMAIL.BCC = "test@ken3.org" 'BCCに変えただけ objMAIL.Subject = "未承諾広告※(笑)" '件名 objMAIL.Body = strMOJI '本文の代入 objMAIL.Send '直接送信箱行き 'おまけでOutlook表示 Dim myNameSpace As Object Dim myFolder As Object Set myNameSpace = oApp.GetNameSpace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダーを指定 myFolder.Display '表示 End Sub objMAIL.BCC = "test@ken3.org" 'BCCに変えただけ なんでBCCとわかったんだよ、、、直感です。 じゃなくって、.Toがそのまま宛先だったので、 勇気をもって実験したら通りました。(できました) あっ、複数の宛先にBCCだっけ、 カンマで区切ったらできるのかなぁ? よし、やってみますか '文字列で宛先を作る strBCC = "test@ken3.org, excel@ken3.org, access@ken3.org" objMAIL.BCC = strBCC '宛先の文字列を渡す あれ?エラーだよ、、 strBCC = "test@ken3.org , excel@ken3.org , access@ken3.org" と、カンマを離してみるがダメ、、、う〜ん、、、 strBCC = "test@ken3.org ; excel@ken3.org ; access@ken3.org" と、セミコロン;で区切ったらうまく行きました。 あとは、固定値だけどセルからアドレスを取ってきて、 セミコロン区切りにして、.BCCにセットすれば出来上がりかなぁ。 BCCで送信する用途に少し危険なニオイを感じるけど(未承諾広告?に使う?) こんな感じです。 Sub testBCC送信() Dim oApp As Object 'アプリケーションオブジェクト Dim objMAIL As Object 'メールのオブジェクト Dim strMOJI As String '本文 'アプリケーションオブジェクトの作成 Set oApp = CreateObject("Outlook.Application") Set objMAIL = oApp.CreateItem(0) 'olMailItem=0 strMOJI = "こんにちは" & vbCrLf _ & "プログラマーの愚痴、教えまっせ?" & vbCrLf _ & "http://www.ken3.org/ よろしく(笑)" Dim strBCC As String 'BCC宛先の変数を定義 '文字列で宛先を作る strBCC = "test@ken3.org ; excel@ken3.org ; access@ken3.org" objMAIL.BCC = strBCC '宛先の文字列を渡す objMAIL.Subject = "未承諾広告※(笑)" '件名 objMAIL.Body = strMOJI '本文の代入 objMAIL.Send '直接送信箱行き 'おまけでOutlook表示 Dim myNameSpace As Object Dim myFolder As Object Set myNameSpace = oApp.GetNameSpace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダーを指定 myFolder.Display '表示 End Sub /* * 4.おわりの挨拶 */ 今回は、OutLookアプリの操作でBCC送信でした。 ・.TOを.BCCにして、BCCの宛先にアドレスをセット ・複数アドレスは;セミコロンで区切る でした。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。 ---------------------------------- 関連項目(ただのバックナンバー紹介) ---------------------------------- 2003/03/05 Outlookを操作してメールを送りたい ( http://www.ken3.org/backno/backno_vba12.html#55 を参照) で、 Outlookの起動と送信メールの作成を行いました。 1999/11/23 Excel VBA からOutLookデータを読む ( http://www.ken3.org/backno/backno_guchi05.html#22 を参照) で、 Excel97とOutLook97で少し遊んでました。 時間があったら、あわせてみて下さい。
Q.ちょっと疑問なんですが、BCCを利用して複数の人にメールを送信するとき、複数の人の部分が変動する場合、(何かのファイルを参照するまたは、セルに入力されている値(アドレス)を参照する場合)、どのようにすればいいのでしょうか? A.セルの値を使用する方法で簡単なのが、 XXXX = Sheets("シート名").Range("B2") と書く方法です。 これで、B2セルのデータを取り出してます。 でも、実際は、B2セルに aaa@xxxx.xx.xx ; bbb@xxxx.xx.xx ; ccc@xxx.xx.xx とは入れなくて、通常は、 A列 B列 1行目 名前 アドレス 2行目 アキラ akira@xxxx.xx.xx 3行目 タロウ taro@xxxx.xx.xx 4行目 ジロウ xxxx@xxxx.xx.xx ・ ・ ・ 999行目 XXX XXXXXXXXXXXXXXX と一覧表で管理していると思います。 なので、ループで、 strWORK = Sheets("シート名").Range("B2") '先頭の人を入れる For y = 3 to 999 If Len(Sheets("シート名").Cells(y, "B")) = 0 Then '文字数0か? exit For 'ループを抜ける End IF '文字があったら ; を前に付け+する strWORK = strWORK & ";" & Sheets("シート名").Cells(y, "B") Next y とかして、複数の文字を連結したりします。 そして出来上がったstrWORKをBCCに代入したりします。 チョット難しいですが、何かの参考となれば幸いです。 PS.さらに進むと実際はアドレスリストから指定したデータだけ送りたくなるので、 C列に送信フラグを作り、 A列 B列 C列 1行目 名前 アドレス 送信フラグ 2行目 アキラ akira@xxxx.xx.xx 1 3行目 タロウ taro@xxxx.xx.xx 0 4行目 ジロウ xxxx@xxxx.xx.xx 1 と、C列が1だけ送りたかったり。 そんな時は、 strWORK = Sheets("シート名").Range("B2") '先頭の人を入れる For y = 3 to 999 If Len(Sheets("シート名").Cells(y, "B")) = 0 Then '文字数0か? exit For 'ループを抜ける End IF '文字があったら ; を前に付け+する 'C列が1の時だけ If Sheets("シート名").Cells(y, "C") = 1 Then strWORK = strWORK & ";" & Sheets("シート名").Cells(y, "B") End If Next y なんて作ったりするのかなぁ・・・少し長い余談でした。
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]