Je souhaite obtenir à la fois le texte révisé et le texte original d'un document. Je le fais de cette façon:VBA pour chaque boucle verrouillée lorsque je rétablis les révisions
Set wrdDoc = wrdApp.Documents.Open(fileName)
For each sent in wrdDoc.Sentences
if sent.Revisions.Count >=0 then
after=sent.text
sent.Revisions.RejectAll
before=sent.text
SaveRev(before,after)
End if
next
Maintenant, ce serait bien, sauf que les peines malformés comme
C'est une sentence.This est une autre.
Sera analysé de façon étrange. Tout d'abord, il y aura celui-ci: «Ce est une phrase », alors celui-ci avec les deux « Ceci est un sentence.This est un autre. »
ce qui arrive quand il y a des révisions là-bas? La première itération annulera les révisions sur la première phrase, puis la seconde itération ne «verra» pas cette partie révisée.
Bottom line est, la première itération obtenir les deux versions de la première phrase, et la deuxième itération ne recevra que la version originale de la première phrase (tout en obtenant les deux versions de la deuxième phrase).
Permettez-moi de préciser:
Disons que je l'avais
Nous avons commencé original avec ce sentence.And cette phrase.
Et il a été révisé pour
Nous avons fini avec ce sentence.And cette autre phrase.
première itération entraînera
Avant: Nous avons commencé par cette phrase.
Après: Nous avons terminé avec cette phrase.
Mais deuxième itération aura
Avant: Nous avons fini avec ce sentence.And cette phrase. Après: Nous avons terminé avec cette phrase.Et cette autre phrase.
Eh bien, ce que je faisais était de modifier la logique, défaisant la réversion de révision:
Set wrdDoc = wrdApp.Documents.Open(fileName)
For each sent in wrdDoc.Sentences
if sent.Revisions.Count >=0 then
wrdDoc.Undo
after=sent.text
sent.Revisions.RejectAll
before=sent.text
SaveRev(before,after)
End if
next
J'aime cela parce que je me retrouve avec un document non modifié (à l'exception de la dernière phrase). Le fait est que, ce faisant, cela met la macro dans une boucle infinie à une phrase spécifique.
Je n'ai aucune idée de la mécanique de l'pour chacun, je n'ai aucune idée de ce qui le provoque à accrocher.Manifestement, modifier la collection dérange la boucle, mais je ne comprends pas pourquoi.
Je pourrais faire une boucle pour i = 0 à wrdDoc.Sentences.Count, mais je pense que cela me fera sauter des phrases pour les mêmes raisons que je les répète maintenant, et je ne peux pas risquer (même si je vérifie OK, Je dois être sûr que cela n'arrivera jamais).
La question est (sont):
- Quelqu'un peut-il me aider à comprendre pourquoi il est verrouillage sur une phrase,
- Y at-il une meilleure façon de le faire?
- Comment puis-je le résoudre tout en veillant à ne pas sauter de phrases.
Merci beaucoup! PS: Je peux fournir des exemples de documents, laissez-moi savoir si c'est nécessaire (peut-être que ce que je fais mal est déjà clair pour quelqu'un, et je devrais faire les échantillons car je ne peux pas partager les documents que je suis travaille sur).
--EDIT--
Ok, donc c'est là où il est suspendu, que sur le fichier 32e.
Il ne se bloque pas sur une phrase, il en fait quelques-uns au début du document, puis revient au début.
J'ai déjà rencontré la même erreur, mais il a bouclé en une seule phrase, et n'est pas retourné au début. Je pense que c'est le même problème. Je vais essayer de reproduire les versions originales et révisées ici.
Originalversion
MAIN TITLE
Measurement of some variable
1 REQUIRED TOOLS
1.1 Special tools
NOTe:
Some note about the procedure (unaltered by revision)
Equipment name (carrier returned line)
(english) assemply with Equipment PN
Kit
Equipment name (carrier returned line)
(english) assemply with (Another) Equipment PN
Kit
Document continues...
Il y a 2 entrées de l'équipement avant de redémarrer la boucle. La révision consistait à insérer le numéro du document, certaines majuscules de la première lettre du mot et à modifier l'ordre entre le PN de l'équipement et le «kit».
Version révisée
ducument number
MAIN TITLE
Measurement of Some Variable
1 REQUIRED TOOLS
1.1 Special Tools
NOTe:
Some note about the procedure (unaltered by revision)
Equipment name (carrier returned line)
(english) assemply with kit
Equipment PN
Equipment name (carrier returned line)
(english) assemply with kit
(Another) Equipment PN
Document continues...
enregistrés paires d'origine/de Revison étaient:
originale ......................... ......... Révisé
{Vide} ................................. numéro ..Document
mesure d'une variable .............. La mesure de certaines variables
Outils spéciaux ............................ Outils spéciaux
(anglais) assemby avec ....... ........... (anglais) assemby avec kit
(anglais) assemby avec .................. (anglais) assemby avec kit
Puis il recommence, en enregistrant les mêmes entrées jusqu'à ce que je casse. Je ne vois pas les phrases qui se chevauchent dont j'ai parlé, mais il y avait une insertion de saut de ligne sur la révision.
Merci!
Est-ce que ça reste toujours dans la même phrase? Si oui, quelle phrase est-ce? – nhee
Je dois atteindre mon poste de travail car les fichiers ne quittent pas le client. Je vais essayer d'autres fichiers pour voir si je peux le reproduire. – RSinohara
"J'aime ça parce que je me retrouve avec un document non modifié (sauf pour la dernière phrase).": FYI pour faire défaire la dernière phrase il suffit de déplacer 'wrdDoc.Undo' pour être en dessous de' before = send.text' –