2017-01-25 3 views
1

Ich habe einen Outlook-Makro, der Code zum Abrufen von Regeln hat, der auf Outlook 2013 funktioniert, aber nicht auf einem anderen Computer, der Outlook 2016 ausgeführt wird.Outlook 2016 vba Application.Session.Default.GetRules() gibt keine Regeln zurück

Der Code ist:

Set colRules = Session.DefaultStore.GetRules() 

    For Each oRule In colRules 
     ruleName = oRule.Name 
     If Left(ruleName, 21) = "AutoCategorize into *" Then 
      oRule.Execute (True) 
     End If 
    Next 

Das Problem nach meinen Debuggen ist, in denen zurück colRules Objekt. On 2016, zeigt es 26 Elemente hat, enthält aber keine: (debug view image in 2016)

enter image description here

auf Outlook 2013, das gleiche Objekt zeigt alle 26 Artikel (Regeln): (debug view image in 2013)

enter image description here

Andere Beobachtungen:

  • Der Regelassistent zeigt alle 26 Regeln auf beiden Computern korrekt an.
  • Einige der Regeln wurden auf dem Computer mit Outlook 2013 definiert, so dass sie als (für andere Computer) auf dem 2016 Regeln Assistenten angezeigt werden;
  • OutlookSpy Store -> Funktionen -> getRules liefert das gleiche Ergebnis: (Bild kann nicht schreiben noch ... nicht genug Ruf)

EDIT - ich den Grund für das Problem gefunden, aber nicht die Lösung ... Der Grund, warum die Dinge nicht funktionieren, ist, weil das Regel-Objekt Regeln "von einem anderen Computer" enthält. Ich löschte alle Regeln, die zum Testen "von einem anderen Computer" markiert wurden, und führte das Makro erneut aus. Jetzt hat es alle verbleibenden Regeln gefunden. Gleiches gilt für OutlookSpy. Also ist etwas in Microsoft-Implementierung von Regeln gebrochen. Natürlich kann ich nicht so bleiben, da es ein Exchange-Postfach ist, hat es tatsächlich die Regeln auch vom anderen Computer entfernt ... Ich habe dies auf einem anderen Konto getestet und habe das gleiche Ergebnis, was die Outlook-API nicht beweisen kann Regeln handhaben. Hat jemand alternative Lösungen oder Workarounds? @Dmitry?

+0

Sehen Sie die Regeln auf der MAPI-Ebene in OutlookSpy (http://www.dimastr.com/outspy)? Wechseln Sie zum Ordner Posteingang, klicken Sie auf die Schaltfläche IMAPIFolder, wechseln Sie zur Registerkarte PR_RULES_TABLE (falls sichtbar). –

+0

Dmitry, ich bin nicht vertraut mit OutlookSpy, aber ich habe es hinzugefügt und folgte Ihren Anweisungen, aber in dem Fenster, das Pops gibt es keine Registerkarte mit diesem Namen. –

+0

Ich fummelte mehr mit OutlookSpy. Wenn ich auf "Speichern" klicke, dann auf der Registerkarte "Funktionen", klicke ich auf "GetRules", ich bekomme ein Fenster, das besagt, dass es 26 Regeln gibt, aber keine von ihnen wird angezeigt. Also ist es im Grunde dasselbe. Ich werde diesen Screenshot zur ursprünglichen Nachricht hinzufügen. –

Antwort

0

Bitte versuchen Sie das Makro, das ich nach einem Kampf erstellt habe, um mir zu verdeutlichen, wo meine Regeln in meiner Outlook 2016-Installation gespeichert sind, weil sie nicht dort waren, wo ich sie vermutete.

Alle außer zwei meiner Stores erzeugen die Meldung: "440 Dieser Shop unterstützt keine Regeln. Die Operation konnte nicht abgeschlossen werden. "Für alle diese Speicher sind die Regeln im Standardspeicher" Outlook-Datendatei ". Aber ein Geschäft enthält seine eigenen Regeln.

Mit meiner Outlook-Installation hat der Speicher mit seinen eigenen Regeln eine Erweiterung von "OST", die angibt, dass es sich um einen Offline-Speicher handelt. "Outlook Datendatei" und alle anderen Speicher haben eine Erweiterung von "PST".

Ich würde gerne wissen, was dieses Makro für Sie generiert. Sind Ihre Regeln in einem OST-Speicher und nicht wie erwartet im Standardspeicher?

Public Sub DemoRules() 

    Dim ColRules As Outlook.Rules 
    Dim ErrDesc As String 
    Dim ErrNum As Long 
    Dim InxStoreCrnt As Long 
    Dim RuleCrnt As Outlook.Rule 

    With Session 
    For InxStoreCrnt = 1 To .Stores.Count 
     With .Stores(InxStoreCrnt) 
     Debug.Print .DisplayName 
     Set ColRules = Nothing 
     On Error Resume Next 
     Set ColRules = .GetRules() 
     ErrNum = Err.Number 
     ErrDesc = Err.Description 
     On Error GoTo 0 
     If ErrNum <> 0 Then 
      Debug.Print " " & ErrNum & " " & ErrDesc 
     Else 
      If Not ColRules Is Nothing Then 
      If ColRules.Count = 0 Then 
       Debug.Print " no rules in this store" 
      Else 
       For Each RuleCrnt In ColRules 
       Debug.Print " " & RuleCrnt.Name 
       Next 
      End If 
      Else 
      Debug.Print " No error but GetRules returned Nothing" 
      End If 
     End If 
     End With 
     Set ColRules = Nothing 
    Next 
    End With 

End Sub 
+0

Ich habe etwas ähnliches verwendet, um die Geschäfte zu durchlaufen und die Regeln von jedem zu bekommen und es hat immer noch nicht funktioniert. Ich habe 3 Läden und einer von ihnen scheitert komplett, wenn ich versuche, die Regeln zu bekommen, der andere hat 0 Regeln und der erste sagt, dass er 26 Regeln hat, aber keine. Ich schulde dir zumindest, dass du deinen Code testest - also werde ich posten in Kürze Ergebnisse ... –

+0

Also habe ich es versucht und einen Laufzeitfehler bekommen - es wurde erwartet: Der Code schlägt in der Zeile fehl: Für jede RuleCrnt in ColRules. Dies, weil ColRules leer ist, aber die Anzahl 26 ist. –

+0

Schauen Sie sich das Bild an, das ich vom Debugger bereitgestellt habe. Es zeigt die Struktur von colRules. Dies ist offensichtlich ein Microsoft-Bug. Die Frage ist: Gibt es eine andere Möglichkeit, um die Regeln anzuzeigen? –

Verwandte Themen