は、OutlookのVisual Basic(私たちはOutlook 2003とExchange Serverを使用しています)にメッセージハンドラ関数を書き込んで、受信メールを並べ替えるのに役立ちました。時にはルールが失敗し、Outlookがそれを無効にすることを除いて、私のために働いています。その後、ルールを元に戻して手動で受信トレイで実行して追いつきます。ルールは自然に失敗し、1日に数回非アクティブになります。私はこれを一度だけ修正したいと思っています。ここで
は、機能性を剥奪コードですが、あなたにそれがどのように見えるかのアイデアを与える:私が得る
Public WithEvents myOlItems As Outlook.Items
Public Sub Application_Startup()
' Reference the items in the Inbox. Because myOlItems is declared
' "WithEvents" the ItemAdd event will fire below.
' Set myOlItems = Outlook.Session.GetDefaultFolder(olFolderInbox).Items
Set myOlItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub myOlItems_ItemAdd(ByVal Item As Object)
On Error Resume Next
If TypeName(Item) = "MailItem" Then
MyMessageHandler Item
End If
End Sub
Public Sub MyMessageHandler(ByRef Item As MailItem)
Dim strSender As String
Dim strSubject As String
If TypeName(Item) <> "MailItem" Then
Exit Sub
End If
strSender = LCase(Item.SenderEmailAddress)
strSubject = Item.Subject
rem do stuff
rem do stuff
rem do stuff
End Sub
一つのエラーは、VBは、その項目がMailItemない文句を言いMyMessageHandlerを呼び出し、「型が一致しません」です。 OK、しかしTypeName(Item)は "MailItem"を返すので、ItemはどのようにMailItemになりませんか?
もう1つは、空白の件名のメールが届く場所です。行
strSubject = Item.Subject
私にはエラーが発生します。私はItem.Subjectは空白でなければならないが、なぜそれはエラーですか?
ありがとうございました。
タイプ名は、人間が判読できるバージョンのタイプを調べます。同じ名前を持つ2つの異なる型が存在する可能性があるため、型名を使用して型チェックを行うと、偽陽性/陰性が発生します。代わりに "TypeOf Item is MailItem"を試してください – rpetrich
'TypeName(Item)=" MailItem "'ならば、MailItemsだけを受け入れるだけでなく、その項目がMailItemかどうかを確認するプロシージャを呼び出します。 – JimmyPena