web-dev-qa-db-ja.com

現在開いているメールでの作業

アクティブな開かれた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
_
13
dan

私はあなたのコードの何が間違っているのか正確にはわかりません。ただし、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
19
Joshua Honig

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

            '
            Dim myOlExp As Outlook.Explorer
            Dim myOlSel As Outlook.Selection

            Set myOlExp = Application.ActiveExplorer
            Set myOlSel = myOlExp.Selection
            'MsgBox myOlSel.item(1)


            Dim selectedFolder As Outlook.MAPIFolder
              Set selectedFolder = myOlExp.CurrentFolder
            Dim itemMessage As String
              itemMessage = "Item is unknown."


             Dim expMessage As String
             expMessage = "Your current folder is " & selectedFolder.Name & "." & vbCrLf

             If myOlSel.Count > 0 Then

                             Dim selObject As Object
                            Set selObject = myOlSel.item(1)

                            If (TypeOf selObject Is Outlook.mailItem) Then
                                Dim mailItem As Outlook.mailItem
                                Set mailItem = selObject
                                itemMessage = "The item is an e-mail message." & " The subject is " & mailItem.Subject & "."
                                mailItem.Display (False)

                            ElseIf (TypeOf selObject Is Outlook.contactItem) Then
                                Dim contactItem As Outlook.contactItem
                                Set contactItem = selObject
                                itemMessage = "The item is a contact." & " The full name is " & contactItem.Subject & "."
                                contactItem.Display (False)

                            ElseIf (TypeOf selObject Is Outlook.AppointmentItem) Then
                                Dim apptItem As Outlook.AppointmentItem
                                Set apptItem = selObject
                                itemMessage = "The item is an appointment." & apptItem.Subject & "."

                            ElseIf (TypeOf selObject Is Outlook.taskItem) Then
                                Dim taskItem As Outlook.taskItem
                                Set taskItem = selObject
                                itemMessage = "The item is a task." & " The body is " & taskItem.Body & "."
                            ElseIf (TypeOf selObject Is Outlook.meetingItem) Then
                                Dim meetingItem As Outlook.meetingItem
                                Set meetingItem = selObject
                                itemMessage = "The item is a meeting item. " & "The subject is " & meetingItem.Subject & "."
                            End If
                        End If
                        expMessage = expMessage & itemMessage
                    MsgBox (expMessage)
            End Sub
1
Restevao