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

Printed on: April 16, 2024 at 12:04 o'clock

Member: colinardo
colinardo Jul 02, 2014 updated at 09:18:43 (UTC)
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
Member: malika
malika Jul 02, 2014 at 10:28:42 (UTC)
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.
Member: colinardo
Solution colinardo Jul 02, 2014, updated at Sep 19, 2014 at 07:31:40 (UTC)
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
Member: malika
malika Jul 02, 2014 at 11:37:10 (UTC)
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...
Member: colinardo
colinardo Jul 02, 2014 updated at 12:06:16 (UTC)
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
Member: malika
malika Jul 02, 2014 at 12:28:02 (UTC)
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...
Member: colinardo
colinardo Jul 02, 2014 updated at 12:32:48 (UTC)
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.
Member: malika
malika Jul 02, 2014 at 13:35:11 (UTC)
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!
Member: colinardo
colinardo Jul 02, 2014 updated at 14:07:17 (UTC)
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...
Member: malika
malika Jul 02, 2014 at 20:39:41 (UTC)
Goto Top
Ok, vielen Dank!

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