malika
Goto Top

Word 2010: Suchen und Ersetzen mit Querverweis

Hallo,

ich bräuchte einen Tipp. Wie kann man im Word 2010 nach einem bestimmten Text über die Funktion »Suchen und Ersetzen« (F5-Taste) suchen und mit Querverweis ersetzen?

Danke!

Content-Key: 242479

Url: https://administrator.de/contentid/242479

Ausgedruckt am: 28.03.2024 um 23:03 Uhr

Mitglied: colinardo
colinardo 02.07.2014 aktualisiert um 11:18:43 Uhr
Goto Top
Hallo Malika,
könnte man mit einem VBA Makro erledigen (Suchwort: Zeile 4):
Sub ReplaceTextWithCrossReference()
    ActiveDocument.Content.Select
    With Selection.Find
        .Text = "Suchwort"  
        .Replacement.Text = ""  
        .Forward = True
        .Wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = True
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    While Selection.Find.Execute
        Selection.InsertCrossReference ReferenceType:="Überschrift", ReferenceKind _  
        :=wdContentText, ReferenceItem:="1", InsertAsHyperlink:=True, _  
        IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "  
    Wend
End Sub
Die Parameter für den Querverweis musst du natürlich an deine Gegebenheiten anpassen. Im Beispiel wird die erste Überschrift referenziert.
Tipp: Zeichne dir mit der Makro-Aufzeichnen Funktion den InsertCrossReference Befehl auf so musst du nicht raten welche Parameter du benötigst.

Grüße Uwe
Mitglied: malika
malika 02.07.2014 um 12:28:42 Uhr
Goto Top
Danke Uwe!

Meine Endversion:

Sub ReplaceTextWithCrossReference()

    ActiveDocument.Content.Select

    With Selection.Find
        .Text = "Test-Text"  
        .Replacement.Text = ""  
        .Forward = True
        .Wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = True
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

    While Selection.Find.Execute
        Selection.InsertCrossReference ReferenceType:="Textmarke", ReferenceKind:= _  
        wdContentText, ReferenceItem:="txt_Firstname", _  
        InsertAsHyperlink:=True, IncludePosition:=False, SeparateNumbers:=False, _
        SeparatorString:=" "  
    Wend

End Sub

»txt_Firstname« ist der Querverweis als Textmarkenname; »Test-Text« ist das gesuchte Wort.

Leider bei jedem Aufruf muss man die Beiden immer anpassen.
Mitglied: colinardo
Lösung colinardo 02.07.2014, aktualisiert am 19.09.2014 um 09:31:40 Uhr
Goto Top
Zitat von @malika:
Leider bei jedem Aufruf muss man die Beiden immer anpassen.
auch kein Beinbruch face-smile. Diese Version übernimmt zusätzlich den aktuell markierten Text im Dokument in die Suchabfragebox, sollte eine Auswahl bestehen.
Sub ReplaceWithCrossReference()
    Dim strDefault, strSuchwort, strTextmarke
    If Not Selection Is Nothing Then
        strDefault = Selection.Text
    End If
    strSuchwort = InputBox("Geben sie das Suchwort ein:", "Suchwort", strDefault)  
    strTextmarke = InputBox("Geben sie die Textmarke ein:", "Textmarke")  
    If strSuchwort <> "" And strTextmarke <> "" Then  
        ActiveDocument.Content.Select
        With Selection.Find
            .Text = strSuchwort
            .Replacement.Text = ""  
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = False
            .MatchWholeWord = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        While Selection.Find.Execute
            Selection.InsertCrossReference ReferenceType:="Textmarke", ReferenceKind _  
            :=wdContentText, ReferenceItem:=strTextmarke, InsertAsHyperlink:=True, _
            IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "  
            
            Selection.MoveLeft Unit:=wdWord, Count:=1
            Selection.Expand Unit:=wdWord
            For Each oField In Selection.Fields
                If oField.Type = wdFieldRef Then
                    scode = oField.Code.Text
                    If InStr(scode, "Charformat") = 0 Then oField.Code.Text = scode & "\* Charformat"  
                End If
            Next
            Selection.Fields.Update
            Selection.MoveRight Unit:=wdWord, Count:=1
        Wend
    End If
End Sub
Das ganze noch mit einem Button versehen, feddich face-smile

Grüße Uwe
Mitglied: malika
malika 02.07.2014 um 13:37:10 Uhr
Goto Top
Ich sehe noch eine Kleinigkeit. Nehmen wir an, dass der Querverweis als Fett markiert ist, dann werden die ersetzten Texte auch Fett. Ich habe probiert in der While-Schleife mit
Selection.Font.Bold = False
zu lösen aber ohne Erfolg...
Mitglied: colinardo
colinardo 02.07.2014 aktualisiert um 14:06:16 Uhr
Goto Top
Zitat von @malika:

Ich sehe noch eine Kleinigkeit. Nehmen wir an, dass der Querverweis als Fett markiert ist, dann werden die
ersetzten Texte auch zu lösen aber ohne Erfolg...
so einfach geht das hier leider nicht, ist etwas aufwendiger face-wink , ist oben angepasst
Mitglied: malika
malika 02.07.2014 um 14:28:02 Uhr
Goto Top
Zitat von @colinardo:
so einfach geht das hier leider nicht, ist etwas aufwendiger face-wink , ist oben angepasst

Wow! D. h. in der For-Schleife wird Zeichen für Zeichen auf Charformat umgestellt?! Klasse! In der Beispielen von Word-Makros zeigen die mit dem »Selection.Font.Bold« Objekt...
Mitglied: colinardo
colinardo 02.07.2014 aktualisiert um 14:32:48 Uhr
Goto Top
Zitat von @malika:
Wow! D. h. in der For-Schleife wird Zeichen für Zeichen auf Charformat umgestellt?! Klasse! In der
Beispielen von Word-Makros zeigen die mit dem »Selection.Font.Bold« Objekt...
Nein, nach der Umwandlung in eine CrossReference ist der Range ein Feld das mit der Quelle verbunden ist und in das der spezielle Schalter \* Charformat eingefügt wird - Drück mal ALT-F9 dann siehst du es.
Mitglied: malika
malika 02.07.2014 um 15:35:11 Uhr
Goto Top
Könntest du mir bitte noch bei der Auswahlmenü für Bookmarks helfen. Ich habe in der Hilfe nach OneOfN oder Selects gesucht aber nichts gefunden...

Danke!
Mitglied: colinardo
colinardo 02.07.2014 aktualisiert um 16:07:17 Uhr
Goto Top
Wie meinen ??
Du willst eine einfachere Auswahl haben für alle vorhandenen Bookmarks ?
Alle Bookmarks kannst du so auflisten:
Dim bm As Bookmark, all As String
For Each bm In ActiveDocument.Bookmarks
    all = all & bm.Name & vbNewLine
Next
MsgBox all
Die Anzeige in einem Dropdown oder einer ListBox geht dann aber nur mit einem CustomDialog...
Mitglied: malika
malika 02.07.2014 um 22:39:41 Uhr
Goto Top
Ok, vielen Dank!

Ich habe noch ein Problem entdeckt, wenn man die Querverweise mit F9 aktualisiert dann zeigen die ins Nirwana...