どうも、三流プログラマーの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 |
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 |
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]