Verwendung des Revision Objektes sehr langsam und Zahl der Objekte stimmt nicht

  • Word

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ai5g.

    Verwendung des Revision Objektes sehr langsam und Zahl der Objekte stimmt nicht

    Hi,

    ich habe mir eine Routine geschrieben, die alle Format-Revisions in einem Word-Doc annimmt (Code siehe unten). Sie funktioniert zwar, läuft aber extrem lange.

    In einem Testdokument habe ich 392 Revisions, davon etliche Format-Revisions. Wenn ich die Schleifendurchläufe nun mitzähle stelle ich fest, dass die Schleife mehrere 1000 mal durchlaufen wird, wobei sich das letzte Element anscheinend wiederholt.
    Ich habe es auch schon versucht, die Schleife abzubrechen, wenn mehr Durchläufe als Revision stattgefunden haben, dann findet die Routine aber nicht alle Format-Revisions. Wenn ich die revisions numerisch statt mit for each anspreche, läuft der Code noch viel langsamer.
    Elemente größer Anzahl, also z.B. (im Direktbereich)

    Quellcode

    1. debug.print activedocument.Revisions.Item(activedocument.Revisions.count+1).Author

    führen (wie sich das gehört ;) zu einem Fehler.

    Kann mir jemand helfen, das zu verstehen?


    Vielen Dank!!!


    Quellcode

    1. Public Sub AcceptAllFormatChanges()
    2. Dim oDoc As Document
    3. Dim oRevision As Revision
    4. Dim count As Long: count = 0
    5. Set oDoc = ActiveDocument
    6. If oDoc.Revisions.count = 0 Then MsgBox "The active document contains no tracked changes.", vbOKOnly: Exit Sub
    7. On Error GoTo Errhandler
    8. Application.ScreenUpdating = False
    9. Dim t As Long
    10. 'Get info from each tracked change (insertion/deletion) from oDoc and insert in table
    11. With oDoc
    12. For Each oRevision In oDoc.Revisions
    13. t = oRevision.Type
    14. If t = 3 Or t = 10 Then oRevision.Accept: count = count + 1
    15. Next oRevision
    16. End With
    17. Application.ScreenUpdating = True
    18. MsgBox count & " format revisions have been accepted."
    19. Exit Sub
    20. Errhandler:
    21. Application.ScreenUpdating = True
    22. End Sub
    Kleine Ergänzung.

    Ich habe mal ein bischen rumgestet. Wenn ich einfach nur mal afür lle Revision-Objekte den Typ abfrage und dann zum nächsten gehe, bleibt er bei einem hängen; er ruft dann in der for-next-Schleife immer wieder den gleichen auf, was recht lange dauert.

    Überhaupt sind die Zugriffe sehr langsam. Die ersten ca. 20 Revision-Objekte werden in deutlich <1 Sek abgefragt, danach dauert es dann immer länger, bis hin zu einigen Sekunden pro Objekt.

    Ich kann zwar eine Abfrage einbauen um festzustellen, dass die Schleife immer beim gleichen Element landet, komme dann aber nicht weiter - wenn ich eine Sprungmarke zum Ende der Schleife (direkt vor das next statement) einbaue, springt er immer wieder zum selben element.

    Bleiben 3 Fragen:
    - Warum ist das Teil so langsam?
    - Warum springt er bei manchen Elementen immer wieder zu selben Element zurück?
    - Wie könnte ich - wenn ich eine Hängenbleiben erkannt habe - das nächste Element der For each-Schleife erzwingen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ai5g“ ()

    Rein vom Code her kann ich keine Fehler erkennen. Meine einzige Idee (vielleicht aber Blödsinn): Durch oRevision.Accept wird das Revision-Objekt in oDoc.Revisions verändert und das For Each kommt ins Stolpern.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hallo Marcus,
    Danke für Deinen Tipp!
    Sowas hatte ich auch erst gedacht, aber beim genaueren Testen ist mir dann aufgefallen, dass er zumindest das erste mal bei einer Revision hängt, die nicht Formate betrifft (.type = 3 oder 10), für die also auch kein.accept ausgelöst wird.
    Der Fehler kommt sogar dann, wenn ich bei dieser Datei gar keine revision.accept auslöse, sondern einfach nur alle Revisions mal mit der Schleife durchlaufe und den .type mit debug.print ausgebe.

    Ist vielleicht irgendwas an der Word-Datei kaputt. Wir haben an dieser "Testdatei" mit mehreren Leuten aus verschiedenen Ländern und mit verschiedenen Word-Versionen gearbeitet. Die Word-Eigene Reparatur bringt das aber nicht in Ordnung.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ai5g“ ()