メールの件名から取得した文字列をバーコードとして本文の右側に追記し、印刷するマクロ

コメントにて以下のご要望をいただきました。


OutlookVBA初心者です。
1クリックで以下の作業を行いたいと考えております。
(環境:Win10/Outlook2013)

・本文の一部だけを抜粋してヘッダーまたはフッターに表示
 もしくは件名の後ろから7文字
・抜粋した文字列をバーコード表示(バーコードフォントは入っております)
・クイック印刷

抜粋する条件は指定文字列の後ろの7文字です。
(バーコードフォントはBC39のため前後に*を結合する必要があります)

また、実現出来たら他の(遠隔地の営業所)PCにも同様の設定を行いたいのですが、
直接使用しているPCにコードをコピペする以外に方法はありませんでしょうか?

お力添えいただけますと幸いです。
何卒宜しくお願い致します。


バーコードの表示が可能なフォントがインストールされている場合、HTML のタグでフォントを指定することにより文字列をバーコードとして表示することが可能です。
以下のマクロはバーコードのフォントの名前が “Bar-Code 39” である場合に本文の右上にバーコードを表示するものです。
なお、コメントでも返信しましたが、マクロをコピーペースト以外で配布することはできず、配布が必要な場合はアドインとして実装する必要があります。

' ここをトリプルクリックでマクロ全体を選択できます。
Public Sub PrintWithBarcode()
     Const BARCODE_FONT = "Bar-Code 39"  ' バーコードのフォントの名前
     Const BARCODE_SIZE = "20.0pt"       ' バーコードのサイズ
     Const BARCODE_LENGTH = 7            ' バーコード文字列の長さ
     Dim objItem As MailItem
     Dim strBarcode As String
     Dim strHtml As String
     Dim iBodyStart As Integer
     Dim objPrint As MailItem
     ' 現在表示中のメールを取得
     If TypeName(ActiveWindow) = "Inspector" Then
         Set objItem = ActiveInspector.CurrentItem
     Else
         Set objItem = ActiveExplorer.Selection(1)
     End If
     ' メールの件名の末尾の文字を取得
     strBarcode = Right(objItem.Subject, BARCODE_LENGTH)
     ' バーコード表示用の HTML 文字列生成
     strBarcode = "<p align='right' style='font-family:" & BARCODE_FONT _
         & ";font-size:" & BARCODE_SIZE & "'>*" & strBarcode & "*</p>"
     ' 本文を HTML で取得
     strHtml = objItem.HTMLBody
     ' BODY タグの開始位置を取得
     iBodyStart = InStr(LCase(strHtml), "<body")
     If iBodyStart > 0 Then
         ' BODY タグの終了位置を取得
         While iBodyStart <= Len(strHtml) And Mid(strHtml, iBodyStart, 1) <> ">"
             iBodyStart = iBodyStart + 1
         Wend
     End If
     iBodyStart = iBodyStart + 1
     ' 印刷用にメールをコピー
     Set objPrint = objItem.Copy
     ' 本文にバーコードのタグを追加
     objPrint.HTMLBody = Left(strHtml, iBodyStart - 1) & strBarcode & Mid(strHtml, iBodyStart)
     ' メールを印刷
     objPrint.PrintOut
     ' 印刷用のメールを閉じて削除
     objPrint.Close olDiscard
     objPrint.Delete
End Sub

マクロの登録方法やメニューへの追加について

Outlook の「既定のフォルダー」の名前を変更する

コメントにて以下のご要望をいただきました。


Windows8.1 Outlook2013にて、ぷららへIMAP接続でメールを使用しています。
Outlook2010までは下記ページのSTEP 12図のように「送信済みアイテム」と「Sent」フォルダが重複して作成されても、STEP 16図のようにインターネット電子メール設定で指定すれば問題なかったのですが、Outlook2013のにはインターネット電子メール設定に、この「送信済みアイテム」と「削除済みアイテム」タブがありません。また「送信済みアイテム – Sent」と「削除済みアイテム – Trash」ペアの他に、「迷惑メール – Junk」も重複してフォルダが作成されてしまいます。これら重複して作成されてしまうIMAPフォルダをマクロで一致させることは出来ないでしょうか?可能でしたら、ぜひともお願い致します。

Outlook 2010 新規設定方法(IMAP)
http://support.eonet.jp/setup/mail/imap/win/ol2010_setup_imap.html


残念ながら、Outlook では既定で作成される「受信トレイ」や「送信済みアイテム」、「削除済みアイテム」のようなフォルダーは「既定のフォルダー」という特別なフォルダーとして扱われており、このフォルダーをマクロで別のフォルダーに変更したり、フォルダーの名前を変えたりというようなことはできません。
また、「既定のフォルダー」については、Outlook がこれらのフォルダーを作成した際に、そのフォルダーのエントリ ID を PST やメールボックスのプロパティとして保存しており、この情報を変更することもマクロではできません。

しかし、MFCMAPI というツールを使うと、既定のフォルダーであっても名前を変更することが可能です。
今回のように IMAP サーバーと重複するフォルダーに名前を変更する場合の手順は以下の通りになります。

  1. http://mfcmapi.codeplex.com にアクセスし、画面右の [download] ボタンをクリックして zip ファイルをダウンロードします。
  2. ダウンロードした zip ファイルを展開し、MFCMAPI.EXE を取り出します。
  3. MFCMAPI.EXE を実行します。
  4. 起動画面で [OK] をクリックします。
  5. [Session] メニューの [Logon…] をクリックします。
  6. [プロファイルの選択] ウィンドウで IMAP 接続のプロファイルを選択し、[OK] をクリックします。
  7. [Display Name] が電子メール アドレスとなっているエントリをダブルクリックします。
  8. [ルート – メールボックス]-[IPM_SUBTREE] と展開します。
  9. [IPM_SUBTREE] の下の [Sent] をクリックし、2 秒ほど待ってから再度クリックします。
    すると、Sent が反転し、文字入力状態となります。
  10. ”Sent.bak” と入力し、Enter キーを押します。
  11. [IPM_SUBTREE] の下の [送信済みアイテム] をクリックし、2 秒ほど待ってから再度クリックします。
  12. ”Sent” と入力し、Enter キーを押します。

これにより、Outlook の既定の「送信済みアイテム」フォルダーの名前が、IMAP サーバーと同じ「Sent」に変更されます。
IMAP 接続ではフォルダーは名前でのみ識別されるので、このように設定した後で Outlook を起動すると、サーバー上の「Sent」フォルダーのメールが Outlook で既定の送信済みアイテム フォルダーとして認識されている「Sent」フォルダーにダウンロードされるようになります。

「削除済みアイテム – Trash」や「迷惑メール – Junk」についても上記と同様に名前を変更することで、重複を解消することができるでしょう。
なお、.bak を付けた元のフォルダーについては、同期が正しくできていることを確認した後で削除しても構いません。

Windows 8 上の Outlook 2013 のデスクトップ通知

Windows 8 に Outlook 2013 をインストールした場合、デスクトップ通知が画面の右下ではなく、右上に表示されるようになります。
これは、Windows 8 の新しい通知方法に Outlook 2013 が対応しているためです。

Windows 8 では従来のデスクトップ通知はデスクトップ内でのみ表示されるため、ストア アプリを動作させているときには新着メールがあっても気づかないという可能性があります。
そのため、Outlook 2013 では Windows 8 上で動作しているとストア アプリと同じ方法で通知を行い、別のストア アプリの動作中でも通知できるようになっています。

ただし、上記の動作変更により、以下のような現象が発生することがあります。

  • [デスクトップ通知を表示する] をオンにしているのにもかかわらず、新着メールのデスクトップ通知が表示されない。
  • 自動仕分けルールのデスクトップ通知が表示されない。

上記の現象は Windows 8 のアプリの通知設定で通知が無効化されている場合に発生します。

アプリの通知設定は以下の手順で変更できます。

  1. Windows キー + C を押し、チャームを表示します。
  2. [設定] をクリックします。
  3. [PC 設定の変更] をクリックします。
  4. [通知] をクリックします。
  5. [アプリの通知を表示する] をオンにします。
  6. [次のアプリからの通知を表示する] で [Outlook 2013] の通知がオフになっている場合はオンにします。

Outlook 2013 の連絡先アイテムのフォームが以前と異なる現象について

Outlook 2013 のユーザー インターフェイスは Windows 8 に合わせて設計されており、以前のバージョンと全く異なる表示がされるものがあります。

その中の一つが連絡先アイテムです。
連絡先アイテムを作成するときには以前のバージョンと同様のフォームが表示されますが、一度保存して開きなおすと、既定では以下のようなフォームで表示されます。

image

○の中の+をクリックすると展開するという動作は Windows 8 や Windows Phone と同じであり、タッチインターフェイスを意識したものとなっていますが、このフォームではメモがリッチテキストで表示されなかったり、地図が呼び出せなかったりと不便な点もあります。

そこで、このフォームではなく作成時のフォームで表示したいという場合には、連絡先フォルダーの現在のビューを [連絡先] 以外のビュー、例えば [名刺] などにします。
ビューを変えるとダブルクリックしたときに表示されるフォームも、閲覧ウィンドウのフォーマットも変わるんですね。