【なるべくワンライナー】OutlookでVBA


 はじめに

 私の会社のメールソフトがOutlookです。Office製品群としてVBAが利用出来るが、VBAの環境設定がなかなか上手くいかなかった。今でも修行と模索の日々だが、成果物として本文に残します。

 1.最初の難関

 会社に於けるOutlookの「マクロの設定」は「デジタル署名されたマクロに対して警告・・・」に灰色固定されている。IT部門が設定しているのだろう。理由はおそらくOutlook・VBAの設定を、例えば「すべてのマクロを有効にする」にされた状態でマクロが悪用されれば、社内情報をメール経由で社外にジャジャ漏れになるからだろう。
 理由は理解できるが、ああメンドクサイ。IT部門に設定を変更してくれと泣いて頼んでも、0.1秒で却下の回答が来るだろう。

 2.デジタル署名が必要

 この「マクロの設定」がセキュリティ上固定されている為、「デジタル署名」というExcelのマクロ(VBA)時代では全く知りもしなかった知識が必要になった。この「デジタル署名」にたどりつき、必要性を理解するまでが、なかなか大変だった。当たり前だが、「デジタル署名」が必要なんて誰も教えてくれない。機械エンジニアにはハードルが高いよ。

 3.デジタル署名の作業手順

詳細は以下の参考サイトを見て欲しいが、概要は4ステップです。
VBA - 有効なデジタル自己署名証明書を作成するSELFCERT.EXE

ステップ① :パソコン内から、SELFCERT.EXEを探して起動し、「デジタル証明書」を作成する。
ステップ② :作成した「デジタル証明書」を、同パソコン内の「証明書ストア」に移動する。
ステップ③ :「証明書ストア」に移動させた「デジタル証明書」をOutlookの「デジタル署名」に登録する。
ステップ④ :OutLook再起動

 4. 初期設定と環境

 「ツール」から「参照設定」を選択し「Microsoft Outlook 16.0 Object Library」に☑を付ける。 

 5. Outlook・VBA成果物

 なるべくワンライナーを目指したいが限界あり。お許し下さい。

5-1.サイトを開く

パソコンの既定ブラウザで指定サイトを開く

Sub パソコンの既定ブラウザで開く()
    CreateObject("WScript.shell").Run "cmd /c start" & " " & String(2, Chr(34)) & " " & Chr(34) & "https://www.google.co.jp/" & Chr(34), 0, True
End Sub

InternetExplorerで指定サイトを開く

「.Visible = True」を一行にできなかった。

Sub IE起動() 
 With CreateObject("InternetExplorer.Application")
   .Navigate "https://www.google.co.jp/"
   .Visible = True   'Internet Explorerを表示する。
 End With
End Sub

5-2. 選択した文字範囲を抽出

非編集状態(閲覧)の場合

    Sub selectionTest()
        MsgBox ActiveExplorer.Selection(1).GetInspector.WordEditor.Application.Selection
    End Sub

編集状態の場合

新規メール作成や、メールをダブルクリックして開いた場合など

    Sub selectionTest()
        MsgBox ActiveInspector.WordEditor.Application.Selection
    End Sub

5-3. 選択した文字範囲にWikipediaのリンクを付与する。

編集状態じゃないとできないです。

Sub 選択範囲にハイパーリンク付与()
  ActiveInspector.WordEditor.Application.Selection.hyperlinks.Add anchor:=ActiveInspector.WordEditor.Application.Selection.Range, Address:="https://ja.wikipedia.org/wiki/" & ActiveInspector.WordEditor.Application.Selection
End Sub

5-4. 選択範囲に色を付ける。

文字の色は編集モードで変更可能です。

Sub 赤()
     ActiveInspector.WordEditor.Application.Selection.Font.Color = vbRed
End Sub
Sub 青()
     ActiveInspector.WordEditor.Application.Selection.Font.Color = vbBlue
End Sub
Sub 黒()
     ActiveInspector.WordEditor.Application.Selection.Font.Color = vbBlack
End Sub

6. やみくもにやってきて見えてきたこと。

Active系 摘出する対象
ActiveExplorer デスクトップの
最上位階層の
エクスプローラーを摘出
ActiveInspector 今開いている(=編集中)
アイテム(=新規メール等)の
ウインドウを摘出
ActiveInlineResponse
ActiveInlineResponseWordEditor

 参考サイト

Outlook VBA リファレンス
OUTLOOK 研究所