アクティブな開かれた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
_
私はあなたのコードの何が間違っているのか正確にはわかりません。ただし、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
現在選択されているメッセージを意味しますか?その場合は、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