Outlook VBA プログラミングで小さな問題が発生しています。解決策があるかどうか、またはこれが別の "既知の問題" にすぎないかどうかを知りたいです。
コンテキスト:
IMAP 経由で Web メール プロバイダーにアクセスするように Outlook のメール アカウントを構成しました。Outlook では、Web メール フォルダーを正しく表示できます。プロバイダーのスパム フィルターは、スパム メッセージをスパム フォルダーに移動します。
Spam フォルダーに入れられたメッセージを、ローカルの pst ファイル内の別のフォルダーに自動的に移動したいと考えています。
私はそれを99%動作させています(参照用に以下に提供されているコードを使用)。
問題:
Spam フォルダにメッセージがあることがわかります (フォルダ名の横に太字の未読メッセージ数があります) が、ItemAdd はフォルダをクリックしたときにのみ起動します。その時点で、スパム フォルダの内容が表示され、新しいスパムがすべてローカル フォルダに移動されていることがわかります。
フォルダーをクリックせずにコードを実行するために使用できる、ItemAdd 以外の別のトリガー ソースはありますか? フォルダーの未読数が変化したときにトリガーされるイベントはありますか?
技術的な詳細:
- Windows 8 OS
- Outlook 2002 を使用している (はい、わかっています...)
- 私は経験豊富な C/C++ 開発者ですが、VBA の経験は最小限で、Outlook の経験はありません。
VBA コード:
Public WithEvents myItems As Outlook.Items
Public Sub Application_Startup()
Dim myNameSpace As Outlook.NameSpace
Const mailboxName As String = "Mail.com"
Const subfolderName As String = "Spam"
' Reference the items in the MAPI spam folder
' Because myOlItems is declared "WithEvents" the ItemAdd event will fire below.
Set myNameSpace = Application.GetNamespace("MAPI")
On Error GoTo noSpamFolder
Set myItems = myNameSpace.Folders(mailboxName).Folders(subfolderName).Items
On Error GoTo 0
Exit Sub
noSpamFolder:
MsgBox "Unable to find folder <" & mailboxName & "/" & subfolderName & ">"
End Sub
Private Sub myItems_ItemAdd(ByVal Item As Object)
Dim suspectFolder As Outlook.MAPIFolder
' Check to make sure it is an Outlook mail message, otherwise
' subsequent code will probably fail depending on what type
' of item it is.
If TypeName(Item) = "MailItem" Then
' Move message to the 'suspect' folder
On Error GoTo noSuspectFolder
Set suspectFolder = Outlook.Session.GetDefaultFolder(olFolderInbox).Folders("suspect")
On Error GoTo 0
Item.Move suspectFolder
End If
Exit Sub
noSuspectFolder:
MsgBox "Unable to find folder <suspect> as a sub-folder of default inbox folder"
End Sub