7
votes

Comment vérifier si un paragraphe est dans une table ou non dans MS-Word Macro?

L'objet de paragraphe dans le mot a une propriété appelée gamme. Dans cet objet de gamme dispose d'une propriété appelée cellules.

Pour le paragraphe qui ne sont pas dans une table, ce paragraphe.Range.cells est défini sur "". Ceci peut être vu dans la fenêtre de montres en mode débogage.

Pour le paragraphe qui figurant dans une table, le paragraphe.Range.cells possède d'autres propriétés, par exemple, il possède une propriété appelée compte.

J'utilise cette propriété de paragraphe.Range.cells pour déterminer si le paragraphe est dans une table ou non. Cependant, je ne peux pas sembler comprendre comment tester cela.

Par exemple, je ne peux pas simplement tester comme ça ...

si paragraphe.range.cells <> null alors ... ou même Si Isnull (paragraphe.Range.cells), alors ...

Il jette une erreur d'exécution '5907' Il n'y a pas de table à cet endroit

Alors, comment testerais-je pour cela? merci


1 commentaires

Consultez ma réponse ci-dessous, ainsi que l'erreur spécifique = 5907 éditée plus tard.


3 Réponses :


1
votes

* édité (si err =) modifié en (si ERR ERR =) est modifié en (si erreur <>)

Vous pouvez simplement permettre à l'erreur de se produire et de l'attraper à l'aide de Onerror instruction / p> xxx


3 commentaires

+1 Même difficile, il semble que vous ayez votre 'Commentaires mélangé. Si err = 5907, alors "Aucune erreur n'est obtenue ... En fait, l'erreur 5907 s'est produite.


Merci beaucoup pour l'avis.


Je l'ai corrigé juste après avoir lu votre commentaire. Merci encore, merci beaucoupoupie



12
votes

Vous ne pouvez pas appeler la méthode des cellules à moins que le paragraphe ne soit dans une table. Vous devez utiliser une méthode différente pour déterminer si la plage est dans une table.

Vous pouvez utiliser ... p> xxx pré>

... ou ...

paragraph.Range.Information(wdWithinTable)


2 commentaires

paragraphe.range.tables.count> 0 l'a fait (même avec Word Interop in .NET) :)


Le paragraphe.Range.tables.count> 0 est des informations inestimables par opposition au paragraphe.Range.Information (wdwithintable). Dans une boucle, la deuxième option n'est pas plus lente, elle est carrément douloureuse, car une table à 3 lignes 3 peut prendre jusqu'à 15 secondes pour traiter. La première option préférée ne prend que millisecondes. Merci pour la pointe lorsque j'ai passé des heures à essayer de trouver une solution de contournement.



14
votes

Vous pouvez utiliser le Informations Code> Propriété :

If Selection.Information(wdWithInTable) Then
  'What ever you'd like to do
End If


0 commentaires