[三流君] −−> [VBAで楽しく] −−> [VBA Outlook 操作]
−−> No.169 Outlookで複数のファイルを添付するには?

Outlookで複数のファイルを添付するには?

発行内容

Outlookで複数のファイルを添付するには?

どうも、三流プログラマーのKen3です。

今回は、
Outlookで*.xlsなど、複数のファイルを添付する、
そんな処理にチャレンジしてみたいと思います。

/* * 1. 今回のキッカケ */

No.078 Outlookでファイルを添付するには?.Attachments.Add http://www.ken3.org/vba/backno/vba078.html からもらった質問。 --- >ご紹介頂いた添付の自動処理ですが、添付するファイルが常に同じフォルダ >にあって、ファイル名はその日によって異なるが拡張子だけは常に同じとい >う場合、ワイルドカードって使えるんでしょうか? >例えばC:\My Documents 内にあるエクセルファイルを添付したい場合、 > >objMAIL.Attachments.Add "C:\My Documents\"*.xls"" > >として試してみたら構文エラーと表示されてしまいます。 --- と質問をもらった。 う〜ん・・・どうしましょ・・・ >objMAIL.Attachments.Add "C:\My Documents\"*.xls"" で複数ファイルを添付したいかぁ・・・

/* * 2.勝手に仕様や考え方を変える */

上司や先輩が作った動作仕様を勝手に変えると、 動いたり、いい処理を作っても怒られてしまうこともあるのだが、 (※相手のプライドを立てながら・・政治的に動くプログラマーって...イヤだけど) なんて話は、置いといて、 原因は、 >objMAIL.Attachments.Add "C:\My Documents\"*.xls"" で複数ファイルを添付できない ならば、1つ1つバラバラで添付してみますか。 ※1つ1つの連続が複数ってことで

/* * 3.ファイル名を取得する方法でDir関数を使う */

とすると、知りたいのは少し変わって、 C:\My Documents\*.xls このファイル名を取得したいよね。 そんな時に使うのがDir関数です。(※他にもあるけど今回はこれで)
Sub aaa()

    'マイドキュメントの*.xlsファイル名をMSGBOXで表示する
    
    Dim strBASEPATH As String
    Dim strFILETYPE As String
    Dim strFileName As String
    
    'strBASEPATH = "C:\My Documents\"  '調べたい場所
    strBASEPATH = "C:\Documents and Settings\user2000\My Documents\"

    strFILETYPE = "*.xls"  'マッチングパターン

    'DIR関数にC:\My Documents\*.xlsみたいにワイルドカード付きを渡す
    strFileName = Dir(strBASEPATH & strFILETYPE) 
    '↑すると、一番最初の名前が返ってくる(順不同)
    
    '名前がなくなるまでループ
    While strFileName <> ""   'ファイル名が""空文字以外の間ループする
        'ファイル名を使って処理を行う
        MsgBox "ファイル名は" & strFileName & "です"
                'いろいろな処理を行う
        '↑と1つのファイルの処理が終わったら、次の名前を取り出します
        '↓次の名前の処理に移るには、Dir関数を引数無しで呼び出します
        strFileName = Dir  '←不思議だがこの引数無しで次のパターンを取り出せる
    Wend
    '↑こんな感じでループを作って1つ1つファイルを処理してみました。

End Sub
基本の作りは、 ファイル名=Dir("ファイルの場所+*.xlsなどのパターン",ファイルの種類(省略化)) ではじめにC:\My Documents\*.xlsみたいにワイルドカード付きを渡す すると、ファイル名が返ってくるので、 あとはループで、 While ファイル名が空になるまで(ファイル名で無い間) ファイル名がわかるのでファイルに対して処理を行う 処理したよ 処理が終了したら、次のファイル名に進まなきゃ   strFileName = Dir '←*1不思議だがこの引数無しで次のパターンを取り出せる Wend ループの先頭へ ポイントはDir関数を引数無しで呼ぶことかな。*1

/* * 4.添付ファイルを繰り返しセットしてみた */

Dir関数でのテストが終了したら、 複数ファイルを添付する、そんなテストプログラムを作成してみます。
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 _
            & "よろしくお願いします"

    objMAIL.To = "test@ken3.org"           '宛先
    objMAIL.Subject = "未承諾広告※(笑)"  '件名
    objMAIL.Body = strMOJI                 '本文の代入

    'ここでファイル数分 添付ファイルを+する処理を行う
    Dim strBASEPATH As String
    Dim strFILETYPE As String
    Dim strFileName As String
    
    'strBASEPATH = "C:\My Documents\"  '調べたい場所
    strBASEPATH = "C:\Documents and Settings\user2000\My Documents\"
    strFILETYPE = "*.xls"  'マッチングパターン
    
    strFileName = Dir(strBASEPATH & strFILETYPE) 'DIR関数にPATH+*.xlsを渡す
    '↑すると、一番最初の名前が返ってくる(順不同)
    
    '名前がなくなるまでループ
    While strFileName <> ""   'ファイル名が""空文字以外の間ループする
        'ファイル名を使って処理を行う
            '↓1つ1つ添付する ↓↓パス+ファイル名を渡す
        objMAIL.Attachments.Add strBASEPATH & strFileName 
        '↓次の名前の処理に移るには、Dir関数を引数無しで呼び出します
        strFileName = Dir  '←引数無しで次のパターンを取り出せる
    Wend
    '↑こんな感じでループを作って1つ1つファイルを処理してみました。

    objMAIL.Display    '編集メッセージの表示 .Sendから変更

    'おまけでOutlook表示
    Dim myNameSpace As Object
    Dim myFolder As Object

    Set myNameSpace = oApp.GetNameSpace("MAPI")
    Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダーを指定

    myFolder.Display  '表示

End Sub
チョット、ぐちゃぐちゃしてますが、こんな感じで複数無事に添付できたと思います。

/* * 5.終わりの挨拶 */

今回は、 Dir関数を使用して、*.xlsのファイル名を取り出す。 その取り出した複数ファイルをOutlookで添付してみた。 そんな話でした。 三流君VBAでOutlookを操作する http://www.ken3.org/cgi-bin/group/vba_outlook.asp ↑にVBA Outlook系のメルマガまとめてます、こちらも一口どうぞ。 全体的に斬新なテクニック系のネタじゃないのですが、 何か、感じ取ってくれると、うれしいです。 AB型の変わり者、三流プログラマーのKen3でした。

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.169を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・