Outlook の Visual Basic (Outlook 2003 と Exchange Server を使用しています) でメッセージ ハンドラー関数を作成し、受信メールを整理しました。
時々ルールが失敗し、Outlook がそれを非アクティブ化することを除いて、それは私にとってはうまくいっています。
次に、ルールをオンに戻し、受信トレイで手動で実行して追いつきます。ルールは自然に失敗し、1 日に数回無効になります。
これはぜひ一度直していただきたいです。
Outlook の Visual Basic (Outlook 2003 と Exchange Server を使用しています) でメッセージ ハンドラー関数を作成し、受信メールを整理しました。
時々ルールが失敗し、Outlook がそれを非アクティブ化することを除いて、それは私にとってはうまくいっています。
次に、ルールをオンに戻し、受信トレイで手動で実行して追いつきます。ルールは自然に失敗し、1 日に数回無効になります。
これはぜひ一度直していただきたいです。
このコードは、受信トレイにあったさまざまな TypeName を示しています。
Public Sub GetTypeNamesInbox()
Dim myOlItems As Outlook.Items
Set myOlItems = application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
Dim msg As Object
For Each msg In myOlItems
Debug.Print TypeName(msg)
'emails are typename MailItem
'Meeting responses are typename MeetingItem
'Delivery receipts are typename ReportItem
Next msg
End Sub
HTH
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
私が得るエラーの 1 つは、VB が Item が MailItem ではないことを訴える MyMessageHandler を呼び出す "Type Mismatch" です。わかりましたが、TypeName(Item) は "MailItem" を返しますが、どうして Item が MailItem ではないのでしょうか?
もう 1 つは、件名が空のメールが届く場合です。この線
strSubject = Item.Subject
エラーが発生します。Item.Subject が空白であることはわかっていますが、なぜそれがエラーになるのですか?
ありがとう。
Outlook ライブラリが直接参照されている他の Office アプリケーションで、次の VBA コード スニペットを使用しています。
' Outlook Variables
Dim objOutlook As Outlook.Application: Set objOutlook = New Outlook.Application
Dim objNameSpace As Outlook.NameSpace: Set objNameSpace = objOutlook.GetNamespace("MAPI")
Dim objFolder As MAPIFolder: Set objFolder = objNameSpace.PickFolder()
Dim objMailItem As Outlook.MailItem
Dim iCounter As Integer: iCounter = objFolder.Items.Count
Dim i As Integer
For i = iCounter To 1 Step -1
If TypeOf objFolder.Items(i) Is MailItem Then
Set objMailItem = objFolder.Items(i)
With objMailItem
等
私の記憶はこれに関していくぶん曇っています、しかしそれが開封確認のようなものであるとき、私はMailItemがMailItemではないと信じています。(残念ながら、これを実証するVBAコードは別の仕事で書かれており、現在は存在していません。)
また、おそらくあなたが行ったのと同じ理由で(Exchangeのルールが多すぎる、またはルールウィザードのルールが複雑すぎる)、着信メッセージを処理するためのコードを記述しました。同じ問題が発生したことを思い出しているようです。あなたが書いたようなもので彼らを捕まえていましたが、別のタイプのものであるために。
それが役立つのであれば、具体的な例を作成できるかどうかを確認します。
デフォルトの受信トレイに表示されるアイテムには多くの種類があります。
呼び出されたプロシージャで、入力項目をObject
型変数に割り当てます。次に、 または を使用TypeOf
しTypeName
て、 かどうかを判断しMailItem
ます。その場合にのみ、コードは電子メールに適用されるアクションを実行する必要があります。
すなわち
Dim obj As Object
If TypeName(obj) = "MailItem" Then
' your code for mail items here
End If
Dim objInboxFolder As MAPIFolder
Dim oItem As MailItem
Set objInboxFolder = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
For Each Item In objInboxFolder.Items
If TypeName(Item) = "MailItem" Then
Set oItem = Item
next