11

Outlook の Visual Basic (Outlook 2003 と Exchange Server を使用しています) でメッセージ ハンドラー関数を作成し、受信メールを整理しました。

時々ルールが失敗し、Outlook がそれを非アクティブ化することを除いて、それは私にとってはうまくいっています。

次に、ルールをオンに戻し、受信トレイで手動で実行して追いつきます。ルールは自然に失敗し、1 日に数回無効になります。

これはぜひ一度直していただきたいです。

4

7 に答える 7

12

このコードは、受信トレイにあったさまざまな 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

于 2011-12-29T19:03:09.080 に答える
3

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 が空白であることはわかっていますが、なぜそれがエラーになるのですか?

ありがとう。

于 2008-09-17T01:39:16.530 に答える
3

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

于 2012-08-29T18:10:35.100 に答える
2

私の記憶はこれに関していくぶん曇っています、しかしそれが開封確認のようなものであるとき、私はMailItemがMailItemではないと信じています。(残念ながら、これを実証するVBAコードは別の仕事で書かれており、現在は存在していません。)

また、おそらくあなたが行ったのと同じ理由で(Exchangeのルールが多すぎる、またはルールウィザードのルールが複雑すぎる)、着信メッセージを処理するためのコードを記述しました。同じ問題が発生したことを思い出しているようです。あなたが書いたようなもので彼らを捕まえていましたが、別のタイプのものであるために。

それが役立つのであれば、具体的な例を作成できるかどうかを確認します。

于 2008-09-29T20:53:22.673 に答える
1

デフォルトの受信トレイに表示されるアイテムには多くの種類があります。

呼び出されたプロシージャで、入力項目をObject型変数に割り当てます。次に、 または を使用TypeOfTypeNameて、 かどうかを判断しMailItemます。その場合にのみ、コードは電子メールに適用されるアクションを実行する必要があります。

すなわち

Dim obj As Object

If TypeName(obj) = "MailItem" Then
  ' your code for mail items here
End If
于 2012-06-21T19:52:09.420 に答える
1
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
于 2012-07-24T15:36:01.627 に答える