Ein einfaches Delete bringt Fehler 5904 und ein zweites Delete macht, was ich möchte

  • Word

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von jojo6.

    Ein einfaches Delete bringt Fehler 5904 und ein zweites Delete macht, was ich möchte

    Hallo zusammen,

    gegeben ist eine Tabellenzelle in Word, in der sich mehrere Absätze befinden. Jeder Absatz ist mit einer Bookmark gekennzeichnet. Folgende Sub hat die Aufgabe, einen Übergebenen Wert in eine Bookmark zu schreiben oder den zugehörigen Absatz zu löschen. (Außer den letzten Absatz.)

    der nachfolgende Code bringt beim ersten Delete eine Fehlermeldung 5904 und erfüllt dann mit den zweiten doch meinen Wunsch . Warum macht der erste nicht, was ich möchte?

    Grüße
    Jürgen

    Visual Basic-Quellcode

    1. ' Bei manchen Bookmarks soll der ganz Absatz gelöscht werden, wenn es keinen Wert gibt.
    2. Public Sub EinfacherWertAbsatzLöschen(ByRef doc As Word.Document, ByVal str_Bookmarkname As String, ByVal str_Wert As String)
    3. Dim rng As Word.Range
    4. Dim rng2 As Word.Range
    5. Dim l As Long
    6. ' Existiert die gesuchte Bookmark
    7. If doc.Bookmarks.Exists(str_Bookmarkname) Then
    8. ' Gibt es einen Wert
    9. If str_Wert <> "" Then
    10. ' dieser Teil läuft
    11. Else
    12. ' Eigentlich könnte nun der Absatz, in dem sich die Bookmark befindet, gelöscht werden.
    13. ' Doc.Bookmarks(str_Bookmarkname).Range.Paragraphs(1).Range.Delete
    14. ' Aus unbekanntem Grund meldet Word dabei Laufzeitfehler 5904. obwohl es in diesem Absatz
    15. ' keine Fields gibt. Als Work-around wird dieser Absatz zweimal gelöscht. beim zweiten mal geht's
    16. ' Nimm die Range des Absatzes
    17. Set rng = doc.Bookmarks(str_Bookmarkname).Range.Paragraphs(1).Range.Duplicate
    18. On Error Resume Next
    19. Err.Clear
    20. rng.Delete
    21. If Err.Number = 5904 Then rng.Delete
    22. End If
    23. End If
    24. End Sub

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

    err.description sagt dir meist, was der Fehler bedeutet. Evtl. gibt das neue Hinweise. Evtl. ist der Bereich ungültig.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

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

    Hallo,

    danke für beide Antworten.

    zum Hidden: Mein Fehler kommt in Zeile 24. Ich denke, ein Hidden-Fehler käme wahrscheinlich schon in Zeile 21. Um ganz sích zu gehen, habe ich aber doc.Bookmarks.ShowHidden = True von Zeile 21 gesetzt. keine Änderung

    err.description sagt "Bereich kann nicht bearbeitet werden." Dazu frage ich, warum kann der Bereich nicht bearbeitet werden. Zumal in Zeile 25 original das gleiche Komando "rng.Delete" steht, ohne dass rng zwischendurch neu zugewiesen wurde, und hier funzt es.
    Bei mir funktioniert folgendes ganz gut:

    Visual Basic-Quellcode

    1. Public Sub Test()
    2. DeleteBookmark Me, "one", ""
    3. End Sub
    4. Public Sub DeleteBookmark(ByVal doc As Word.Document, ByVal str_Name As String, ByVal str_Value As String)
    5. If doc.Bookmarks.Exists(str_Name) Then
    6. If str_Value <> "" Then
    7. '// Dein Code.
    8. Else
    9. doc.Bookmarks(str_Name).Range.Delete
    10. End If
    11. Else
    12. MsgBox "Bookmark " & str_Name & " doesn't exist!"
    13. End If
    14. End Sub

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

    Häng doch mal ein passendes Word-Dokument hier mit an. Habe Word 2007...

    Ansonsten mal rng vor dem ersten und vor dem zweiten löschen mal ausgeben und vergleichen. Evtl. hilft auch eine Pause vor dem Löschen.?.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Hallo peterfido,

    danke, jetzt läuft's. Da das Programm auch im alten Word 2002 laufen muss nutze ich die Sleep - API. Nun muss ich nur noch ermitteln, wie schnell ich weiter arbeiten darf. Aktuell nutze ich 500 Milliskunden

    Grüße
    Jürgen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „jojo6“ ()

    Es scheint, als hätte ich die Lösung gefunden.

    Bevor ich die Bookmarks mit Werte fülle, füge ich in ein leeres Dokument Autotext, welche dann die Bookmarks mitbringen.

    Bisher geschar dies in folgender Reihenfolge:

    1.) Kopfzeile erste Seite
    2.) Kopfzeile primäre Seite
    3.) Seiteninhalt
    4.) Fusszeile erste Seite
    5.) Fusszeile primäre Seite

    Diese Reihenfolge habe ich geändert in:

    1.) Kopfzeile erste Seite
    2.) Kopfzeile primäre Seite
    3.) Fusszeile erste Seite
    4.) Fusszeile primäre Seite
    5.) Seiteninhalt

    Nun läuft's

    Hat jemand dafür eine Erklärung?

    Gruß
    Jürgen
    Nein, das nicht. Die Sleep Api hält das gesamte "Programm" an. Also kann Word da auch währenddessen nichts "im Hintergrund" weiterackern. Abhilfe wäre evtl. eine Pause mittels OnTime, bzw. GetTickCount.

    So habe ich es mal gelöst.
    (PseudoCode)

    Visual Basic-Quellcode

    1. t=gettickcount() + 100
    2. do
    3. doevents
    4. loop while gettickcount < t
    Gruß
    Peterfido

    Keine Unterstützung per PN!