none
Probleme mit UndoRekord RRS feed

  • Frage

  • Hallo,

    ich arbeite mit Visual Studio 2010 und erstelle gerade ein Word AddIn für Word 2010.

    in einer Klasse habe ich folgende Sub

        Sub test()
    
            Dim app As Word.Application = GetObject(, "Word.Application")
            Dim doc As Word.Document = app.ActiveDocument
            Dim tpl As Word.Template = doc.AttachedTemplate
            Dim ats As Word.AutoTextEntries = tpl.AutoTextEntries
            Dim rngHeader As Word.Range
    
            app.UndoRecord.StartCustomRecord("Undo-Schritt")
    
            rngHeader = doc.Sections(1).Headers(WdHeaderFooterIndex.wdHeaderFooterFirstPage).Range
            rngHeader.Delete()
            rngHeader = ats("Bezeichnung").Insert(rngHeader, True)
            rngHeader.Collapse(WdCollapseDirection.wdCollapseEnd)
            rngHeader.Delete(Count:=1)
    
            app.UndoRecord.EndCustomRecord()
    
        End Sub

    Im ersten Moment sieht alles richtig aus. Klickt man aber auf den Undo-Button, hat die Kopfzeile plötzlich eine Absatzmarke mehr, als sie haben dürfte. Warum?

    Für hilfe wäre ich sehr dankbar.

    Grüße

    Jürgen Z

    Montag, 6. Mai 2013 09:34

Alle Antworten

  • Hallo zusammen,

    also - die Ursache für den Fehler liegt in der Zeile

        rngHeader.Delete(Count:=1)

    ersetzt man die 1 durch eine -1 funktioniert auch ein Undo ohne Probleme.

    Aber

    mit der -1 löscht man die letzte Absatzmarke des eingefügten Autotextes und die schon vorher vorhadene Absatzmarke der Kopfzeile bleibt stehen. Hierbei besteht allerdings das Risiko, dass die beiden Absatzmarken nicht die gleiche Formatierung habe und deshalb die falsche Formatierung stehen bleibt. Deshalb muss vorher die Formatierung der vorletzten Absatzmarke auf die letzte Absatzmarke übertragen werden. Das mache ich derzeit wie folgt.

    Dim letzterAbsatz As Word.Paragraph Dim vorletzterabsatz As Word.Paragraph

    rngHeader.Collapse(WdCollapseDirection.wdCollapseEnd)

    letzterAbsatz = rngHeader.Paragraphs(1) vorletzterabsatz = letzterAbsatz.Previous

    If vorletzterabsatz IsNot Nothing Then letzterAbsatz.Format = vorletzterabsatz.Format letzterAbsatz.Range.Font = vorletzterabsatz.Range.Font End If

    Ich bin mir nicht sicher, ob dies die beste Lösung ist. Wenn Ihr eine bessere Lösung habe, würde ich mit über diese sehr freuen

    Viele Grüße

    Jürgen

    Montag, 6. Mai 2013 14:21