VBA für jede Schleife gesperrt, wenn ich Revisionen zurücksetze

8

Ich möchte sowohl den überarbeiteten als auch den Originaltext aus einem Dokument erhalten. Ich mache es so:

%Vor%

Nun, das wäre in Ordnung, außer dass missgebildete Sätze wie

  

Dies ist ein Satz. Dies ist ein anderer.

Wird auf seltsame Weise geparst. Zuerst wird es diesen geben: " Dies ist ein Satz. ", dann dieser mit beiden " Dies ist ein Satz. Dies ist ein anderer. "

Was passiert, wenn es dort Revisionen gibt? Die erste Iteration wird die Revisionen des ersten Satzes wiederherstellen, dann wird die zweite Iteration den revidierten Teil nicht sehen.

Die untere Zeile bedeutet, dass die erste Iteration beide Versionen des ersten Satzes erhält und die zweite Iteration nur die ursprüngliche Version des ersten Satzes erhält (während beide Versionen aus dem zweiten Satz stammen).

Lassen Sie mich klarstellen:

Sagen wir, ich hätte das Original

  

Wir haben mit diesem Satz begonnen. Und diesen Satz.

Und es wurde zu

überarbeitet
  

Wir haben mit diesem Satz geendet. Und diesen anderen Satz.

Die erste Iteration führt zu

  

Vorher: Wir haben mit diesem Satz angefangen.

     

Nachher: ​​Wir haben mit diesem Satz geendet.

Aber die zweite Iteration wird

haben
  

Vorher: Wir haben mit diesem Satz geendet. Und diesen Satz.

     

Nach: Wir haben mit diesem Satz geendet. Und diesen anderen Satz.

Nun, was ich getan habe, war die Logik zu ändern und die Reversionsreversion rückgängig zu machen:

%Vor%

Ich mag das, weil ich mit einem unveränderten Dokument (außer dem letzten Satz) ende.

Die Sache ist, das macht das Makro in eine Endlosschleife bei einem bestimmten Satz.

Ich habe keine Ahnung von den Mechanismen der für jeden, ich habe keine Ahnung, was ihn verursacht. Offensichtlich ändert das Ändern der Sammlung die Schleife, aber ich verstehe nicht warum.

Ich könnte für i = 0 auf wrdDoc.Sentences.Count loopen, aber ich denke, das wird mich dazu bringen, Sätze aus denselben Gründen zu überspringen, die ich jetzt wiederhole, und ich kann es nicht riskieren (selbst wenn ich OK teste, ich muss sicher sein, dass es nie passieren wird).

Die Frage ist (sind):

  1. Kann mir jemand helfen, herauszufinden, warum es einen Satz blockiert,
  2. Gibt es einen besseren Weg, dies zu tun?
  3. Wie kann ich es lösen und dabei sicherstellen, dass Sätze nicht übersprungen werden.

Vielen Dank!

PS: Ich kann Beispieldokumente zur Verfügung stellen, lass es mich wissen, wenn es nötig ist (vielleicht ist das, was ich falsch mache, schon jemandem klar, und ich müsste die Samples machen, da ich die Dokumente nicht teilen kann auf).

- BEARBEITEN -

Ok, hier hängt es nur an der 32. Datei.

Es hängt nicht an einem Satz, es macht tatsächlich ein paar am Anfang des Dokuments, dann geht es zurück zum Anfang.

Ich habe zuvor den gleichen Fehler gefunden, aber es wurde in einem einzigen Satz geloopt und ging nicht zum Anfang zurück. Ich denke, es ist das gleiche Problem. Ich werde versuchen, Original und überarbeitete Versionen hier zu reproduzieren.

Originalversion

%Vor%

Vor dem Neustart der Schleife gibt es zwei Geräteeinträge.

Die Revision bestand aus dem Einfügen der Dokumentennummer, einigen Anfangsbuchstaben der Word-Obergrenzen und dem Ändern der Reihenfolge zwischen Equipment PN und "Kit".

Überarbeitete Version

%Vor%

Recorded Original / Revison-Paare waren:

Original .................................. Überarbeitet

{Empty} ................................... Dokumentennummer

Messung einiger Variablen .............. Messung einiger Variablen

Spezialwerkzeuge ............................ Spezialwerkzeuge

(englisch) Montage mit .................. (englisch) Montage mit Bausatz

(englisch) Montage mit .................. (englisch) Montage mit Bausatz

Dann fängt es wieder an, die gleichen Einträge aufzunehmen, bis ich kaputt gehe. Ich sehe nicht, dass die Sätze sich überschneiden, über die ich gesprochen habe, aber es gab einen Zeilenumbruch in die Revision.

Danke!

    
RSinohara 28.04.2015, 00:41
quelle

1 Antwort

1

Enumerierbare Objekte sollten während der Aufzählung nicht verändert werden oder es können schlimme Dinge passieren (was vom Sammlertyp abhängt).

Meine Vermutung ist, dass der Revisions- / Undo-Prozess zusammen mit dem Wonky-Satz bewirkt, dass sich die aufzählbaren Sentences ändern.

Sie sollten zuerst Ihre eigene Sammlung vorbereiten, um zu sehen, ob das einen Unterschied macht. Probieren Sie einfach Set sents = New Collection: For Each sent in wrdDoc.Sentences: sents.Add sent: Next aus und verwenden Sie dann sents für Ihre Main For Each-Schleife.

    
Cor_Blimey 17.05.2015, 16:31
quelle