Fehler in Makro für XE-Feldfunktion/Textmarke

Hallo,

ich habe ein Makro, das XE-Feldfunktionen, wie sie in Word für Indexmarkierungen verwendet werden, um gleichnamige Textmarken ergänzt, welche auch nach der Konvertierung ins HTML-Format erhalten bleiben.
Das Makro hat leider einen Fehler und meine VBA-Kenntnisse reichen nicht, ihn zu analysieren. Und zwar erkennt das Makro die XE-Funktionsfelder nur dann, wenn sie entweder am Anfang einer Zeile stehen oder ein Leerzeichen davor steht. Steht ein XE-Funktionsfeld jedoch unmittelbar hinter einem Wort oder Zeichen oder unmittelbar hinter einem anderen XE-Funktionsfeld, wird es nicht erkannt und folglich keine Textmarke gesetzt.
Kann mir irgendjemand verraten, wo der Fehler liegt? Vielen Dank!!!

Gruß
Björn

Und hier das Makro:

Sub TextmarkeBeiIndexSetzen()
Dim MeinIndex As Field
Dim strTextmarke As String
Dim i As Integer
On Error Resume Next
For Each MeinIndex In ActiveDocument.Fields
If MeinIndex.Type = wdFieldIndexEntry Then
strTextmarke = Mid(MeinIndex.Code, 5, Len(MeinIndex.Code) - 5)
If ActiveDocument.Bookmarks.Exists(strTextmarke) = True Then
strTextmarke = strTextmarke & i
i = i + 1
End If
MeinIndex.Select
Selection.Bookmarks.Add Name:=strTextmarke
End If
Next
End Sub

hi björn

also, bei mir klappt das makro ganz ohne probleme. kannst du mal ein beispieldokument posten, damit man das problme nachvollziehen kann?

lg
erwin

Hi Erwin,

nachdem ich die Codezeile „On Error Resume Next“ entfernt habe, werden die problematischen Felder angezeigt. Tatsächlich, sie wurden gar nicht ignoriert, sie waren nur fehlerhaft, enthielten z.B. Leerzeichen und Bindestriche, wo keine sein durften. Stellt sich als nächster Schritt nun die Frage, wie man effizient derartige störenden Zeichen aus Feldfunktionen - und nur daraus - eliminiert. Vermutlich mal wieder mit einem Makro :wink:

Gruß
Björn

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hmm, eine Analyse ergab, daß die Leerzeichen erst durch ein anderes Makro eingebracht worden sind. Ich habe eine Anpassung in dessen Code vorgenommen und damit das Problem aus der Welt geschafft. Da dieses andere Makro die Funktion hat, die Leerzeichen in XE-Feldfunktionen durch Unterstriche zu ersetzen, werde ich diese Funktion nun noch auf Bindestriche erweitern und somit die XE-Felder kompatibel machen.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hi Björn

der befehl „on error resume next“ ist ein extrem gefährlicher befehl, der ausschließlich ganz gezielt eingesetzt und so bald wie möglich wieder durch ein „on error goto 0“ beendet werden sollte. ansonsten wird man makrofehler nur extrem schwer finden können. der befehl hat sowieso nur desshalb eine daseinsberechtigung, weil das vba bzw. das objektmodel von word teilweise extreme einschränkungen hat (z.b. gibt es bei den meisten collections keine exists-methode).

lg erwin

Hi Erwin,

nachdem ich die Zeile gelöscht habe und das Makro nun bei jedem Fehler anhält, stelle ich fest, daß ich in manchen Feldern einen Abschnitt löschen müßte, der sich nicht einfach mit ‚suche Text „xyz“ und ersetze durch „“‘ löschen läßt. Die einzige Gemeinsamkeit dieser noch störenden Bereiche: Code in eckigen Klammern und mit einem Punkt. Offenbar werden weder eckige noch runde Klammern und auch keine Punkte geduldet. Daher würde ich gerne die linke (öffnende) eckige Klammer und den nachfolgenden Teil löschen, da diese Teile ohnehin immer am Ende eines Feldes vor den abschließenden Anführungszeichen stehen. Wie kann man das in VBA am besten umsetzen? Bin für jeden Tipp dankbar :smile:

Gruß
Björn

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Problem gelöst:
„suchen und ersetzen“ mit Platzhalterzeichen, suchen nach
([[]*)(*[]])
und ersetzen durch nichts. Dokumentation:
http://www.medizin.uni-koeln.de/kai/imsie/kurse/word…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]