2010-04-20 7 views
1

J'écris une macro dans MS Word qui devrait trouver tout le texte surligné dans un document et effectuer une action sur chacun d'eux. Je prévois une boucle pour faire la partie de recherche et de manipulation et n'ai aucun problème avec cette partie du code.
Mais je ne sais pas comment trouver combien d'itérations je vais avoir besoin. Existe-t-il un moyen de déterminer le nombre de points forts dans VBA?
Merci beaucoup d'avance.Comment trouver le nombre de blocs de texte surlignés dans un document MS Word

Répondre

2
With ActiveDocument.Range.Find 
    .Highlight = True 
    While .Execute 
    Debug.Print .Parent.Text 
    Wend 
End With 

Il n'est pas nécessaire de calculer le nombre de correspondances initiales. Vous pouvez exécuter la recherche dans une boucle et il s'arrêtera une fois qu'il n'y aura plus de correspondance.

Assurez-vous d'appliquer la recherche à la partie droite du document.J'ai utilisé ActiveDocument.Range, mais n'importe quel objet Range fera l'affaire. Peut-être que quelque chose de plus spécifique est mieux pour votre cas.

En outre, consultez les nombreuses autres propriétés du Find objet et mettez-les à des valeurs sensibles, cela vaut mieux que d'aller avec les valeurs par défaut (personne ne peut se rappeler tous les paramètres par défaut pour toutes les options, plus l'objet Find peut-être déjà mis en place par une recherche antérieure).

+0

Merci beaucoup. Cela fonctionne comme une merveille. Mais si ce n'est pas demander trop, pourriez-vous également indiquer si le nombre peut être trouvé du tout? Vous voyez, avant d'entrer dans la boucle, la macro effectue d'autres modifications et il sera utile de vérifier si le document a déjà été traité ou non. Si un utilisateur invoque deux fois la macro, il détecte qu'il a été exécuté une fois. Cela fonctionnera si je peux trouver le nombre de surbrillances parce que la macro supprime la marque de surbrillance des morceaux et après cela, il n'y en a plus. –

+0

@Majid: S'il n'y a pas de surbrillance après la première passe, alors la boucle ne fonctionnera même pas au second essai, car il n'y a pas de surbrillance (ie, 'Execute()' renvoie 'False' tout de suite). ;) Ou peut-être que je ne comprends pas exactement ce que tu veux? – Tomalak

+0

Oui, le code à l'intérieur de la boucle ne serait pas exécuté lors de la seconde exécution, mais j'ai du code avant la boucle, qui sera exécutée. C'est pourquoi j'ai besoin d'une vérification s'il y a des faits saillants dans le document. Je ferais ce contrôle comme la première chose que fait la macro. S'il n'y a aucun moyen d'accéder directement à ce numéro, j'imagine qu'il me faudrait deux boucles while imbriquées? –

Questions connexes