2015-10-02 2 views
1

J'essaie d'obtenir la (les) valeur (s) textuelle (s) des conditions pour une règle que j'ai définie dans MS Outlook.Comment obtenir des valeurs de texte de règles dans MS Outlook en utilisant VBA?

J'ai créé une règle nommée "TestRule" avec une condition basée sur du texte dans le corps du message (il doit contenir le texte "zzz") et une condition basée sur du texte dans l'en-tête du message. le texte "aaa" dedans). (Bien sûr, cette règle ne fonctionnera probablement jamais, c'est juste pour tester si je peux lire les conditions dans la règle.) La règle et les conditions sont activées.

Voici le code que j'utilise

Dim olRules As Outlook.Rules 
Dim olRule As Outlook.Rule 

Set olRules = Application.Session.DefaultStore.GetRules 
Set olRule = olRules.Item("TestRule") 

Debug.Print olRule.Conditions.Body.Text 
Debug.Print olRule.Conditions.MessageHeader.Text 

Cependant, les deux lignes de Debug.Print donnent une erreur de "Incompatibilité de type".

Comment puis-je lire la valeur actuelle des conditions?

(I ont vérifié et revérifié. Il est une règle nommée "TestRule")

Répondre

1

GD RDC,

J'ai Putten un peu plus d'efforts dans votre problème et je pense que je l'ai compris pourquoi vous obtenez l'incompatibilité de type.

Vous avez probablement ajouté des mots-clés à la condition "body" ainsi qu'à la condition "messageheader"? Ces entrées individuelles sont ajoutées à un tableau, le tableau "olRule.Conditions.Body.Text".

Vos lignes de code ci-dessous;

olRule.Conditions.Body.Text 
Debug.Print olRule.Conditions.MessageHeader.Text 

demandent en substance le « Debug.Print » mehtod d'imprimer un tableau, mais il ne sait pas comment faire. Comme il ne comprend pas quelle partie du tableau à imprimer. En fonction de la quantité d'entrées que vous avez créées, l'identifiant de chaque entrée nécessitera nécessairement un identifiant pour pointer vers l'entrée de tableau unique.

Alors:

  • olRule.Conditions.Body.Le texte (0) pointe vers la première entrée dans le tableau . Ol12.Conditions.Body.Text (1) pointera vers la deuxième entrée dans le tableau.

Il y a deux façons de résoudre votre problème de codage:

  1. Définissez un point d'arrêt sur la ligne:

    olRule.Conditions.Body.Text

Donc, cette exécution s'arrête juste avant l'exécution de la ligne de code. Ouvrez votre 'Locals Window' (fenêtre View Locals) et ouvrez olRule.Text et vous verrez autant d'entrées de tableau que vous avez ajouté.

  1. Modifier votre code pour lire comme ci-dessous

sous-programme principal

Sub TestRule() 
Dim olRules As Outlook.Rules 
Dim olRule As Outlook.Rule 

Set olRules = Application.Session.DefaultStore.GetRules 
Set olRule = olRules.Item("TestRule") 

Debug.Print TypeName(olRule) 

printArray olRule.Conditions.Body.Text 
printArray olRule.Conditions.MessageHeader.Text 

End Sub 

sous-routine printArray

Private Sub printArray(ByRef pArr As Variant) 
    Dim readString As Variant 

    If (IsArray(pArr)) Then    'check if the passed variable is an array 

     For Each readString In pArr 

      If TypeName(readString) = "String" Then 'check if the readString is a String variable 
       Debug.Print readString 
      End If 

     Next 

    End If 

End Sub 

Vous pourrait également intégrer le deuxième sous-programme dans la première mais c'est une meilleure pratique de codage effectuer des tâches répétitives soit dans une fonction ou dans un sous-programme séparé (vous pouvez alors l'utiliser pour d'autres méthodes du même module :-))

vous fournir la solution!

Goodluck!

+0

Brillant! C'était la résolution! Je n'avais aucune idée que c'était un tableau, mais c'est tout à fait logique quand on y pense. Merci beaucoup. – DRC

0

GD RDC,

Êtes-vous sûr qu'il ya une règle par le nom « TestRule "existant dans votre magasin par défaut.

Si j'exécute votre code ci-dessus j'obtenir le résultat parfait (bien que rien ne soit imprimé que les valeurs ne sont pas définies donc la syntaxe dans votre code ci-dessus est bien

Essayez d'ajouter:..

Debug.Print TypeName(olRule) 

le résultat dans la fenêtre immédiate devrait être « règle » si votre olRule est effectivement mis

Code donc dans l'ensemble devrait être:.

Dim olRules As Outlook.Rules 
Dim olRule As Outlook.Rule 

Set olRules = Application.Session.DefaultStore.GetRules 
Set olRule = olRules.Item("TestRule") 

Debug.Print TypeName(olRule) 
Debug.Print olRule.Conditions.Body.Text 
Debug.Print olRule.Conditions.MessageHeader.Text 

Espérons que cela vous guidera dans la bonne direction!

À la votre!

+0

Merci @mtholen. Mais, oui, il y a * une règle nommée "TestRule" et quand j'ajoute Debug.Print TypeName (olRule) je reçois avec succès la sortie dans la fenêtre immédiate de "Rule". Lorsque je colle votre code dans un sous-programme et l'exécute, je reçois la sortie dans la fenêtre de débogage de "Rule" puis l'erreur "Type mismatch" sans sortie de débogage supplémentaire. Je me demande ce qui ne va pas? J'apprécie votre confirmation que le code est sur la bonne voie si! – DRC