[三流君] −−>
[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系の→[掲示板]←を覗く、質問を書き込む
評価・感想
ページフッター(リンクや広告など)
[三流君(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に流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・