素人がExcelVBAによる「一人働き方改革」に挑むブログスマートフォン用の表示で見る素人がExcelVBAによる「一人働き方改革」に挑むブログExcelVBAネタです。LotusNotes連携LotusNotesで送るメールの自動作成メール作成・送信を自動化するマクロ職場では、IBMのLotusNotesというグループウェアを使っています。いえ、ほとんど活用されていなくて、日常的にはせいぜいメールの送受信ぐらいにしか使われていない。私も、なんとなく非常に高機能なものなんだろうなあとは思いつつ、ほとんど活用していないwほとんど単なるメーラーと化しているNotes。同じメールを一斉送信するだけならいいんだけど、あっちこっちにちょっとづつ文面や添付ファイルが異なるメールを送らなきゃならん、ということになると非常にメンドクサイ。「新規文書としてコピー」だかなんだかの機能(すまん、職場にしかNotesがないから確認できん)を使って一部を変えては送信、というやり方も2通や3通ならポチポチできようが、20通とか50通とか100通とかになってくると、もはや拷問のような業務になるし、添付ファイルの取り違えや宛先(メールアドレス)と本文内の宛名が一致しない、なんていうミスも起こりやすくなる。ただでさえ砂を噛むような苦痛でしかない業務なのに、その上ミスが出て謝りまくるというのはあまりにも精神衛生上よろしくない。なんとかならないものなのか、とggりまくって見つけたのがコチラのページ。メール」とかでggったら、一番よくヒットするコードかも知れない。どのバージョンでも動くと思います。Sub'Notesが起動していることが前提。これを使い始めたきっかけは、150件以上の宛先に、それぞれ全て異なる添付ファイルを添付してメールを送るという、アホとしか思えない業務があったからだった。聞けば、これまでの担当者は、それを休日に職場に出て行って、半日がかりでやっていたらしい。第一、休日の間に送ったメールでミスがあったら、週明けは苦情電話祭りになるじゃんか......」と思ったので、必死でそんなアホなことに陥らないようにggりまくりましたよ。良かった、インターネッツのある時代で。そんなわけで、上掲のコードには非常にお世話になりましたよ。150件超のそれぞれ添付ファイルの異なるメールを、ちゃーんと本文内の宛名もその人に合わせて、10分ほどで送信完了できたわけですからね。当時は、コードの意味なんてほとんど分からないまま使っていましたが、少しは分かるようになってきているので、確認も兼ねて説明してみよう。素人のやることなので、間違えていたら優しく教えてください。(1)は、後の(15)、EmbedObject関数(?)の引数にするための定数。(2)~(6)では、VBAでNotesの各オブジェクトを操作するために、Notesの各オブジェクトを格納する変数を宣言している。(2)は、Notesのセッションそのもの。......と書いている自分でもいまいち意味がよく分かっていないw(3)は、Notesのデータベース。(4)は、Notesのドキュメント。メール全体を指すのだと思う。(5)は、Notesのリッチテキストアイテム。メールの中の、本文をはじめとする「目に見えている部分」を表しているのだと思う。(6)は、Notesの埋め込みオブジェクト。添付ファイルなどの、メールに埋め込まれるものを表しているのだと思う。たかがメール1本に、これだけたくさんのオブジェクトが関わっとるんですなあ。(7)では、VBAのCreateObject関数を用いて"Notes.NotesSession"クラスのインスタンスを生成して変数にセットしている。以後、この変数を使ってNotesのセッションを操作できるということ。(8)では、(7)でインスタンス化したNotesSessionクラスのgetDatabaseメソッドを使ってNotesDatabaseクラスのインスタンスを生成し、変数にセットしている。(9)では、(8)でインスタンス化したNotesDatabaseクラスのopenMailメソッドを用いて......何してるんだろ???(10)では、(8)でインスタンス化したNotesDatabaseクラスのcreateDocumentメソッドを用いてNotesDocumentクラスのインスタンスを生成し、変数にせっとしている。(11)以下のところでは、(10)でインスタンス化したNotesDocumentクラスのそれぞれのフィールドに値をセットしている。これはまあ、見たらだいたい初心者でも何やってるかは分かると思う。(12)では、NotesDocumentクラスのcreateRichTextItemメソッドを用いて、NotesRichTextItemクラスのインスタンスを生成し、変数にセットしている。さあ、いよいよここからがメール本体の部分だ。(13)は、NotesRichTextItemクラスのappendTextメソッド。引数に指定したテキストを本文に追加する。(14)は、NotesRichTextItemクラスのaddNewLineメソッド。引数で指定した行数の新しい行を追加する。(15)は、NotesRichTextItemクラスのembedObjectメソッドを用いて添付ファイルをNotesEmbededObjectクラスのインスタンスとして生成しているのだと思う。した上で変数にセットしているのだろう。(16)でメールを送信。あとは、オブジェクト変数を解放し、メッセージを表示しておしまい、ということ。このコードには本当に非常にお世話になった。このコードのおかげで何度救われたことか......。二つかなり困ることがあった。メールがいきなり送られてしまうこと。送信履歴が残らないこと。仕方がないので、常に自分自身にBCCで送るようにして擬似的に送信履歴が残るようにしていた。このやり方だと、受信リスト上で選ぶたびに「このメールには非表示の写しが」でんでんうんぬんといちいち出てきてうっとうしいことこの上ない。それでも辛抱して使い続けていたある日、コチラのページに出会ったのでした。メールを自動作成し、送信直前の状態で表示するマクロソースコードも引用しておきます。'*********************************************************************************'いきなり送りつけずに、編集状態にする様に改造'一旦確認してから送ると、送信ボックスに残るメリットあり。Subポイントは(*)のところ。何と、たったこれだけで、送信直前の状態で画面表示されます。Notesの側で送信アイコンをクリックして送信するので、ちゃんと送信履歴に残るし、(*)の時点でドラフトに保存されているから、送信せずに閉じてもちゃんと残っている。これは素晴らしい!!!!!!!!!!!......というわけで、私は、上記2つのコードを参考に、Excelでご覧のようなシートを作成し、メールを自動作成するマクロを作って大いに活用しています。そのマクロは、また折を見てご紹介します。今日はもうここまででかなり長くなってしまったので......。»プロフィールid:akashi_keirinExcelVBAネタです。SyntaxHighlighter.all();注目記事はてなブログをはじめよう!akashi_keirinさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。