2

誰かが Outlook で新しい電子メールを作成するたびに、VBA 関数を実行したいと考えています。これは、ユーザーが [新しいメール] ボタンをクリックしたか、サードパーティ プログラムが新しいメール ウィンドウを生成したために発生する可能性があります。

Application_ItemLoad() を使用して、イベント引数として渡されるアイテム オブジェクトを検査しようとしましたが、2007 年に「アイテムのプロパティとメソッドは、このイベント プロシージャ内では使用できません」というメッセージが表示されます。どうやら、これは Outlook 2007 の既知の問題です。

誰かがこれを行うための信頼できる方法を持っていますか?

ありがとう、

スティーブ

4

2 に答える 2

2

Outlook 2010 ではうまくいきましたが、バグ レポートは見つかりませんでした。あなたの正確なコードは何ですか?「アイテムオブジェクトを検査する」とはどういう意味ですか?

次のようにコードをイベントに配置するだけです。

Private Sub Application_ItemLoad(ByVal Item As Object)
    MsgBox "New mail item."
End Sub

それで全部です。

MS から提供されたこれらのコメントがお役に立てば幸いです: http://msdn.microsoft.com/en-us/library/office/ff868544.aspx

備考:

このイベントは、Outlook アイテムがメモリにロードされ始めたときに発生します。Outlook アイテムの Class および MessageClass プロパティの値以外のアイテムのデータはまだ使用できないため、Item で返された Outlook アイテムの Class または MessageClass 以外のプロパティを呼び出すとエラーが発生します。同様に、Outlook アイテムからメソッドを呼び出そうとしたり、Item で返された Outlook アイテムで Application オブジェクトの GetObjectReference メソッドを呼び出したりすると、エラーが発生します。

編集:
私が思いつくことができる最善の方法は、このコードを Application_ItemSend イベントメソッドに入れることです:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

Dim myInspector
Dim wdDoc
Dim rng

Set myInspector = Item.GetInspector
Set wdDoc = myInspector.WordEditor

Set rng = wdDoc.Application.Selection

With rng
    With rng.Style.Font
        .Name = "Arial Black"
        .Size = 12
    End With
End With

Set myInspector = Nothing
Set wdDoc = Nothing

End Sub

問題は、まだ利用可能になっていないアイテムにプロパティを設定できないことです (MS の説明によると)。まあ、この観点からは、実際には不可能です。

于 2012-10-24T09:10:18.140 に答える
0

返信のためにこれを行う方法を思いつきました。ただし、新しいコンポジションに対してこれを行う方法はまだわかりません。

Public WithEvents myExplorer As Outlook.Explorer 'Gives us the ability to trigger off explorer events
Public WithEvents myMailItem As Outlook.MailItem 'Gives us the ability to trigger off MailItem events

Private Sub Application_Startup()   
    Set myExplorer = Application.ActiveExplorer 'Initialize
End Sub

Private Sub myExplorer_SelectionChange()
    If (myExplorer.Selection.Count > 0) Then
        If (myExplorer.Selection.Item(1).Class = olMail) Then
            Set myMailItem = myExplorer.Selection.Item(1) 'Initialize
        End If
    End If
End Sub


Public Sub NewHTMLEmail(htmlToUse As String, Addressee As String, SubjectLine As String)
    Dim NewEmail As Outlook.MailItem
    Set NewEmail = Application.CreateItem(olMailItem)
    NewEmail.BodyFormat = olFormatHTML
    NewEmail.Subject = SubjectLine
    NewEmail.To = Addressee
    NewEmail.HTMLBody = htmlToUse
    NewEmail.Display
End Sub

'This trigger executes when we hit the "Reply" button while viewing a mail item
Private Sub myMailItem_Reply(ByVal Response As Object, Cancel As Boolean)
    Dim htmlString As String, thisMailItem As Outlook.MailItem, MissingText As String
    Set thisMailItem = Response
    Call NewHTMLEmail(thisMailItem.HTMLBody, thisMailItem.To, thisMailItem.Subject)

    Response.Close olDiscard
    thisMailItem.Delete    
End Sub
于 2013-10-11T14:07:34.620 に答える