15

アクティブな開かれた MailItem を取得したいと思います (それが新しいメールか受信メールか)。ユーザーがマクロを実行するときに、そのメールにコンテンツを追加する必要があります。Outlook 2003 と VBA を使用しています。

私はこれを見つけました: VBA を使用して Outlook で現在開いているウィンドウのメール アイテムへの参照を取得するにはどうすればよいですか? ただし、何も設定されていないため機能しませTypeName(Application.ActiveWindow)ん。私も試しSet Mail = Application.ActiveInspector.currentItemましたが、どちらもうまくいきません。

ActiveInspectorのことについて、私が理解していないことがあるはずです。

Application_Startup()要求に応じて、これは専用モジュールにあるプロシージャ/マクロであり、ユーザーがメソッドに追加されたメニュー ボタンをクリックすると呼び出されます

Sub myMacro()
    Dim NewMail As Outlook.MailItem
    Set NewMail = Application.ActiveInspector.currentItem
End Sub
4

3 に答える 3

20

あなたのコードの何が問題なのか正確にはわかりません。ただし、1つには、編集可能な新しい電子メールが開いていることを検証していません。次の概念実証は、私があなたがやろうとしていると思うことを正確に実行します。作成中のアクティブな電子メールにテキストを挿入します。これが不可能な場合は、理由を説明するメッセージボックスが表示されます。

テキストを挿入する部分は、Wordが電子メールエディターとして使用されている場合にのみ機能します(これは、Outlook 2010+では常に当てはまります)。そうでない場合は、BodyまたはHTMLBodyテキストを直接解析および更新する必要があります。

Sub InsertText()
    Dim myText As String
    myText = "Hello world"

    Dim NewMail As MailItem, oInspector As Inspector
    Set oInspector = Application.ActiveInspector
    If oInspector Is Nothing Then
        MsgBox "No active inspector"
    Else
        Set NewMail = oInspector.CurrentItem
        If NewMail.Sent Then
            MsgBox "This is not an editable email"
        Else
            If oInspector.IsWordMail Then
                ' Hurray. We can use the rich Word object model, with access
                ' the caret and everything.
                Dim oDoc As Object, oWrdApp As Object, oSelection As Object
                Set oDoc = oInspector.WordEditor
                Set oWrdApp = oDoc.Application
                Set oSelection = oWrdApp.Selection
                oSelection.InsertAfter myText
                oSelection.Collapse 0
                Set oSelection = Nothing
                Set oWrdApp = Nothing
                Set oDoc = Nothing
            Else
                ' No object model to work with. Must manipulate raw text.
                Select Case NewMail.BodyFormat
                    Case olFormatPlain, olFormatRichText, olFormatUnspecified
                        NewMail.Body = NewMail.Body & myText
                    Case olFormatHTML
                        NewMail.HTMLBody = NewMail.HTMLBody & "<p>" & myText & "</p>"
                End Select
            End If
        End If
    End If
End Sub
于 2013-03-18T17:18:21.157 に答える
5

現在選択されているメッセージですか?その場合Application.ActiveExplorer.Selection、ではなくコレクションを使用する必要がありますApplication.ActiveInspector.CurrentItem

于 2013-03-18T18:03:40.310 に答える