2016-12-02 5 views
-1

Ich bin mir nicht sicher, was das Problem verursacht. Mein Ziel ist ziemlich einfach - ich möchte etwas Text "abc.XXXX" durch eine inkrementelle Zahl ersetzen, so dass es auf "abc.0001", "abc.0002", "abc.0003" usw. übertragen wird. Was passiert ist, dass für einige Dokumente das Skript für immer läuft, ohne irgendetwas (zumindest nicht sichtbar) zu ersetzen oder Fehler zu geben.suchen und ersetzen Problem Endlosschleife

Hier ist meine aktuellen Code

With ActiveDocument.Content 
     With .Find 
      .ClearFormatting 
      .Replacement.ClearFormatting 
      .text = ABC_123.XXXX 
      .Forward = True 
      .Wrap = wdFindContinue 
      .Format = False 
      .MatchWildcards = False 
      .Execute Replace:=wdReplaceOne 
     End With 

     While .Find.Found = True 
      count = count + 1 
      lastReqNr = lastReqNr + 1 
      .text = ABC_123. & Right(String(4, "0") & lastReqNr, 4) 
      .Collapse wdCollapseEnd 
      .Find.Execute Replace:=wdReplaceOne 
     Wend 
    End With 

Für einige Dokumente dieser Code perfekt funktioniert gut, aber einige Dokumente verursachen Probleme. Die Variablen sind in jedem Fall korrekt gefüllt. Könnte der Grund sein, dass ich viel mit Modifikationsverfolgung arbeite?

+1

zu ändern Gibt es eine Möglichkeit Sie ein Beispiel für eine Situation schaffen kann, wo sie in die Endlosschleife läuft? Was genau ist "S_FIND" gleich? – SalvadorVayshun

+0

Hey, natürlich. "S_FIND" ist z.B. "ABC_123.XXXX" und die Endlosschleife scheinen zu erscheinen, wenn der Text etwa so aussieht: 'ABC_123.XXXX \ n (früher: ABC_003.004)'. Ich dachte, dass eine unendliche Schleife nicht passieren sollte, da die Ersetzung den aktuellen Wert mit ABC_123.0001 überschreibt, was ABC_123.XXXX nicht mehr entspricht. – Erik

+0

Ich habe versucht, im Detail herauszufinden, wann die Schleife passiert: Es tritt jedes Mal ein Absatz auf ist direkt hinter dem Text zu ersetzen. Dann ersetzt das Wort 'ABC_123.XXXX' durch' ABC_123.0001ABC_123.0002ABC_123.0003 ... 'und so weiter. Hat jemand eine Idee warum der Absatz/Zeilenumbruch zu diesem Verhalten führt? – Erik

Antwort

0

Mein schlechtes. Habe nicht erwähnt, dass Änderungen in den Dokumenten aktiv sind. Wenn der Suchtext von jemandem gelöscht wurde, wird er überarbeitet. Das Makro ersetzt den Text, der (bei aktivierter Änderungsverfolgung) eine neue Revision mit dem zu ersetzenden Text erstellt.

Einfach, aber nicht perfekte Lösung ist, die Vorwärts-Wert

Forward = False