閲覧ウィンドウで表示されているメールの WordEditor を取得する方法

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


いつも参考にさせて頂いております。ありがとうございます。

メール本文の選択した範囲のみをエクセルへ吐き出すマクロを作りたいと考えております。

こちらのサイトを参考にさせて頂き、メールウィンドウを開いた時にはできるようになりましたが、閲覧ウィンドウで実施しようとするとWordEditorが上手く指定できません。(下記★部)

閲覧ウィンドウでのWordEditorの設定方法もしくは代替え案があればご教示頂けませんでしょうか。

<中略>

‘ Word Editor オブジェクトを取得
★’Set wrdEditor = ActiveInspector.WordEditor オブジェクト変数が設定されていませんと怒られる


ActiveInspector は現在表示されている Inspector ウィンドウ (アイテムごとのウィンドウ) を操作するためのものです。
したがって、アイテムをダブルクリックして表示していない場合は ActiveInspector に対する処理は失敗しますし、アイテムを表示している場合はそのアイテムに対する操作となります。
閲覧ウィンドウが表示されているウィンドウは Explorer、このオブジェクトでは ActiveInlineResponseWordEditor  で WordEditor オブジェクトの取得ができますが、こちらはインライン返信を行っている際の返信アイテムのみで使用可能です。
受信したメールを閲覧ウィンドウで表示している状態で、このメールの選択部分の取得などのために WordEditor にアクセスする場合は、以下のような手順となります。

  1. ActiveExplorer.Selection(1) により、選択しているアイテムのオブジェクトを取得する
  2. 取得したアイテムの GetInspector プロパティにより、Inspector オブジェクトを取得する
  3. 取得した Inspector の WordEditor プロパティにより、WordEditor オブジェクトを取得する

例えば、現在表示しているウィンドウで選択している本文の文字列を取得する関数は以下のようになります。

' ここをトリプルクリックでマクロ全体を選択できます。

Private Function GetSelectedText() As String
     Dim objInspector As Inspector
     Dim wrdEditor
     ' メールをどのように開いているか確認
     If TypeName(Application.ActiveWindow) = "Inspector" Then
         Set objInspector = ActiveInspector
     Else
         Dim objItem
         Set objItem = ActiveExplorer.Selection(1)
         Set objInspector = objItem.GetInspector
     End If
     '
     Set wrdEditor = objInspector.WordEditor
     GetSelectedText = wrdEditor.Application.Selection
  End Function

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