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

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

#　1.最初の難関
　会社に於けるOutlookの「マクロの設定」は「デジタル署名されたマクロに対して警告・・・」に灰色固定されている。IT部門が設定しているのだろう。理由はおそらくOutlook・VBAの設定を、例えば「すべてのマクロを有効にする」にされた状態でマクロが悪用されれば、社内情報をメール経由で社外にジャジャ漏れになるからだろう。
　理由は理解できるが、ああメンドクサイ。IT部門に設定を変更してくれと泣いて頼んでも、0.1秒で却下の回答が来るだろう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/1a1f3a6d-6c16-0f53-161a-f560ee7e8cc1.png)

#　2.デジタル署名が必要
　この「マクロの設定」がセキュリティ上固定されている為、「デジタル署名」というExcelのマクロ（VBA）時代では全く知りもしなかった知識が必要になった。この「デジタル署名」にたどりつき、必要性を理解するまでが、なかなか大変だった。当たり前だが、「デジタル署名」が必要なんて誰も教えてくれない。機械エンジニアにはハードルが高いよ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/c0a5250f-7ca9-c8c7-b675-e242445424bf.png)

#　3.デジタル署名の作業手順
 詳細は以下の参考サイトを見て欲しいが、概要は4ステップです。
[VBA - 有効なデジタル自己署名証明書を作成するSELFCERT.EXE](https://riptutorial.com/ja/vba/example/25363/%E6%9C%89%E5%8A%B9%E3%81%AA%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E8%87%AA%E5%B7%B1%E7%BD%B2%E5%90%8D%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8Bselfcert-exe)

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

#　4. 初期設定と環境
　「ツール」から「参照設定」を選択し「Microsoft Outlook 16.0 Object Library」に☑を付ける。　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/6c6d286b-cda2-5d96-6b99-d0609be77717.png)


#　5. Outlook・VBA成果物
　なるべくワンライナーを目指したいが限界あり。お許し下さい。
## 5-1.サイトを開く

### パソコンの既定ブラウザで指定サイトを開く
```VB
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」を一行にできなかった。

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


## 5-2. 選択した文字範囲を抽出
### 非編集状態（閲覧）の場合

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


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

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

## 5-3. 選択した文字範囲にWikipediaのリンクを付与する。
### 編集状態じゃないとできないです。

```VB
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. 選択範囲に色を付ける。
文字の色は編集モードで変更可能です。

```VB
Sub 赤()
     ActiveInspector.WordEditor.Application.Selection.Font.Color = vbRed
End Sub
```

```VB
Sub 青()
     ActiveInspector.WordEditor.Application.Selection.Font.Color = vbBlue
End Sub
```

```VB
Sub 黒()
     ActiveInspector.WordEditor.Application.Selection.Font.Color = vbBlack
End Sub
```

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

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


#　参考サイト
[Outlook VBA リファレンス](https://docs.microsoft.com/ja-jp/office/vba/api/overview/)
[OUTLOOK 研究所](https://outlooklab.wordpress.com/outlook-macroscript-index/)