Czy można przypisać określony styl do wszystkich odsyłaczy w programie Word 2007?

32

Nic więcej do dodania, chciałbym zmienić styl wszystkich odsyłaczy, które mam jednocześnie w dokumencie Word 2007. Ale nie mam pojęcia, jak to zrobić. Jak można to zrobić?

Kaczor
źródło
Dobre pytanie, nie mogłem znaleźć niczego szybkiego i brudnego. Ale myślę, że jest to związane ze stylem całego dokumentu
Ivo Flipse
1
@Ivo, tak, myślę też, że to jest coś związanego ze stylem dokumentu, ale jestem biednym programistą SW bez doświadczenia w programie Word :)
Drake
@marco: zobacz moją zaktualizowaną odpowiedź
wstrzymano do odwołania.
tak, świetna odpowiedź, wielkie dzięki, bardzo bardzo interesujące
Drake

Odpowiedzi:

38

Niektóre typy odsyłaczy są automatycznie formatowane w stylu „intensywnego odniesienia”, ale większość z nich jest sformatowana jako „normalny” tekst.

Aby zastosować styl „intensywnego odniesienia” do tekstu odsyłacza:

  • wybierz tekst
  • wybierz zakładkę „Strona główna” na wstążce
  • za pomocą przycisków góra-dół lub przycisku rozwijanego w grupie wstążek „Style” wybierz styl „intensywne odniesienie” (lub inny styl, jeśli wolisz)

Aby zmienić wygląd całego tekstu danego stylu:

  • wybierz zakładkę „Strona główna” na wstążce
  • za pomocą przycisku rozwijanego w grupie wstążek „Style” wybierz „Zastosuj style ...”
  • w oknie dialogowym „Zastosuj style” w „Nazwie stylu” wybierz nazwę stylu, który chcesz zmienić (np. „intensywne odniesienie”)
  • Kliknij przycisk „Zmień ...”
  • Zmień formatowanie według własnego uznania i kliknij „OK”

Aby zastosować styl do wszystkich odsyłaczy jednocześnie:

  • Naciśnij Alt+, F9aby wyświetlić kody pól
  • Wybierz kartę „Strona główna” na wstążce
  • Kliknij „Zamień” w grupie „Edycja”
  • W polu „Znajdź co” wpisz ^19 REF
    • (To jest REF-Caret-One-Nine-Space-REF)
  • Kliknij pole „Zamień na”, ale nic nie wpisuj
  • Kliknij przycisk „Więcej”
  • Dolna część okna dialogowego powinna nosić tytuł „Zamień” (za nim reguła pozioma)
  • Kliknij przycisk „Formatuj” i wybierz „Styl ...”
  • Wybierz styl (np. „Intensywne odniesienie”) i kliknij OK
  • Powinien teraz pokazywać styl wybrany w polu „Zamień na”
  • Kliknij „Zamień wszystko”, jeśli czujesz się odważny, lub użyj „Znajdź następny” i „Zamień”, aby przejść i zamienić lub pominąć styl każdego kodu pola referencyjnego indywidualnie
  • Naciśnij Alt+, F9aby ukryć kody pól

Zobacz tę stronę, aby uzyskać więcej informacji na temat kodów specjalnych w Znajdź i zamień.

Oto makro, które doda przełącznik \* mergeformatdo każdego z pól. Ten przełącznik jest niezbędny, aby zapobiec utracie formatowania w przypadku aktualizacji pola. Możesz przypisać makro do klawisza, a on będzie przechodził przez pola pojedynczo za każdym naciśnięciem klawisza. Możesz także edytować makro, aby zapętlić cały dokument, aby zautomatyzować proces.

Sub mf()
'
' mf Macro
' Find cross references and add \* mergeformat
'
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "^19 REF"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="\* mergeformat "
    Selection.Find.Execute
End Sub
Wstrzymano do odwołania.
źródło
w rzeczywistości większość odniesień, jeśli nie wszystkie, są tworzone domyślnie z normalnym tekstem. Dziękuję za odpowiedź, ale w tym przypadku muszę ręcznie ustawić styl każdego z nich, zanim będę mógł zaktualizować styl dla wszystkich naraz. Szukałem metody, która może zautomatyzować pierwszy etap tego procesu
Drake
6
wow, nie znałem tych zaawansowanych zastosowań find / replace, bardzo pomocnych
Drake
6
Odpowiedź jest małym klejnotem skondensowanej wiedzy. Warto własną wiki!
Grimace of Despair
5
Jezu Chryste ... to działa świetnie, ale chodzi o to: dlaczego tak trudno zastosować styl do Odsyłaczy !? ;)
Leniel Maccaferri
w MS Word 16.9.1 na Macu, to działa (nie próbowałem makra), ale funkcja znajdowania / zastępowania nie znajduje się na wstążce głównej (tak myślę?), ale zamiast tego w menu pod Edycja-> Znajdź-> Zaawansowane Znajdź i zamień ...
Michael
5
  • Naciśnij Alt+, F9aby wyświetlić kody pól
  • Użyj następującego makra, aby dodać CHARFORMAT do wszystkich odsyłaczy. To makro dodaje ciąg do pola tylko wtedy, gdy go jeszcze nie ma.

    Sub SetCHARFORMAT()
    '
    ' Set CHARFORMAT switch to all {REF} fields. Replace MERGEFORMAT.
    '
    '
        Dim oField As Field
        Dim oRng As Range
        For Each oField In ActiveDocument.Fields
        'For Each oField In Selection.Fields
            If InStr(1, oField.Code, "REF ") = 2 Then
                If InStr(1, oField.Code, "MERGEFORMAT") <> 0 Then
                    oField.Code.Text = Replace(oField.Code.Text, "MERGEFORMAT", "CHARFORMAT")
                End If
                If InStr(1, oField.Code, "CHARFORMAT") = 0 Then
                    oField.Code.Text = oField.Code.Text + "\* CHARFORMAT "
                End If
            End If
        Next oField
    
    
    End Sub
    
  • To makro służy do formatowania wszystkich odsyłaczy za pomocą stylu „Subtelne odniesienie” (upewnij się, że masz taki styl i że wyświetlane są kody pól):

    Sub SetCrossRefStyle()
    '
    ' Macro to set styole of all cross references to "Subtle Reference"
    '
    '
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        Selection.Find.Replacement.Style = ActiveDocument.Styles( _
            "Subtle Reference")
        With Selection.Find
            .Text = "^19 REF"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchKashida = False
            .MatchDiacritics = False
            .MatchAlefHamza = False
            .MatchControl = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    End Sub
    
  • Naciśnij Alt+, F9aby ukryć kody pól

cyborg
źródło
3

edytując makro przesłane przez cyborga, możemy łatwo zautomatyzować pokazywanie i ukrywanie kodów pól. dzięki czemu za każdym razem, gdy chcemy aktualizować, nie musimy używać przełączanych kodów pól. Użyłem następującego kodu, aby dodać przełącznik kodu pola.

ActiveDocument.ActiveWindow.View.ShowFieldCodes = False

Pełne makro jest następujące:

Sub SetCrossRefStyle()
'
' Macro to set styole of all cross references to "Subtle Reference"
'
'
ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Style = ActiveDocument.Styles( _
    "Subtle Reference")
With Selection.Find
    .Text = "^19 REF"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchKashida = False
    .MatchDiacritics = False
    .MatchAlefHamza = False
    .MatchControl = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
End Sub

Po raz pierwszy używam makr, aby przyspieszyć moją pracę słowem. dzięki cyborgowi za tak pomocne makro.

Patel Jaykrushna
źródło
0

Szybki i skuteczny sposób:

  1. Wybierz tekst z formatowaniem, którego chcesz użyć dla odniesień.
  2. Wybierz Start zakładki na wstążce.
  3. Kliknij styl Normalny prawym przyciskiem myszy i wybierz opcję Aktualizuj normalny, aby dopasować wybór .
  4. Referencje aktualizacja z Ctrl+ A, F9.
Jewgienij
źródło
0

To makro otwiera okno dialogowe Odsyłacz, aby wstawić odsyłacz w bieżącej pozycji kursora.

Po zamknięciu okna dialogowego Xref po wstawieniu odwołania makro wznawia się, aby sformatować wstawione odniesienie do indeksu górnego.

Sub XrefSuper()
'
' This opens the Cross Reference dialogue box to insert a cross reference at the current cursor position.
'   When the dialogue box is closed after inserting the reference the macro resumes to format the inserted cross reference to superscript.
'
'
Dim wc As Integer
    wc = ActiveDocument.Characters.Count

Dim dlg As Dialog
    Set dlg = Dialogs(wdDialogInsertCrossReference)
        dlg.Show 'Open dialogue and perform the insertion from the dialog box) 
                 'Macro continues after closing CrossRef dialogue box

    If wc = ActiveDocument.Characters.Count Then Exit Sub   'If we failed to insert something then exit

    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.Font.Superscript = wdToggle
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.Font.Superscript = wdToggle
End Sub

Dzięki Graham Skan z ExpertsExchange za otwarcie okna dialogowego Xref.

TJJ
źródło
0

Łącząc powyższe odpowiedzi z inną funkcją do przechodzenia między „historiami” dokumentu, do stosowania stylizacji na treści dokumentu, nagłówkach, stopkach i tekstu na kształtach.

Wystarczy wywołać poniższe makro SetCrossRefStyle (), aby zastosować styl „Intensywne odniesienie” do wszystkich odsyłaczy.

Sub m_SetCHARFORMAT(textRanges As Collection)
' /superuser/13531/is-it-possible-to-assign-a-specific-style-to-all-cross-references-in-word-2007
'
' Set CHARFORMAT switch to all {REF} fields. Replace MERGEFORMAT.
' Requires ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
'
    Dim oField As Field
    Dim oRng As Range
    For Each oRng In textRanges
        For Each oField In oRng.Fields
            If InStr(1, oField.Code, "REF ") = 2 Then
                If InStr(1, oField.Code, "MERGEFORMAT") <> 0 Then
                    oField.Code.Text = Replace(oField.Code.Text, "MERGEFORMAT", "CHARFORMAT")
                End If
                If InStr(1, oField.Code, "CHARFORMAT") = 0 Then
                    oField.Code.Text = oField.Code.Text + "\* CHARFORMAT "
                End If
            End If
        Next oField
    Next oRng
End Sub


Sub m_AddCrossRefStyle(textRanges As Collection)
' /superuser/13531/is-it-possible-to-assign-a-specific-style-to-all-cross-references-in-word-2007
'
' Macro to set style of all cross references to "Intense Reference"
' Requires ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
'
    For Each oRng In textRanges
        oRng.Find.ClearFormatting
        oRng.Find.Replacement.ClearFormatting
        oRng.Find.Replacement.Style = ActiveDocument.Styles("Intense Reference")
        With oRng.Find
            .Text = "^19 REF"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchKashida = False
            .MatchDiacritics = False
            .MatchAlefHamza = False
            .MatchControl = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        oRng.Find.Execute Replace:=wdReplaceAll
    Next oRng
End Sub


Function m_GetAllTextRanges() As Collection
' https://wordmvp.com/FAQs/Customization/ReplaceAnywhere.htm
' https://www.mrexcel.com/forum/excel-questions/443052-returning-collection-function.html
'
' Get text ranges in all document parts.
'
    Set m_GetAllTextRanges = New Collection
    For Each rngStory In ActiveDocument.StoryRanges
        'Iterate through all linked stories
        Do
            m_GetAllTextRanges.Add rngStory
            On Error Resume Next
            Select Case rngStory.StoryType
                Case 6, 7, 8, 9, 10, 11
                If rngStory.ShapeRange.Count > 0 Then
                    For Each oShp In rngStory.ShapeRange
                        If oShp.TextFrame.HasText Then
                            m_GetAllTextRanges.Add oShp.TextFrame.TextRange
                        End If
                    Next
                End If
                Case Else
                    'Do Nothing
            End Select
            On Error GoTo 0
            'Get next linked story (if any)
            Set rngStory = rngStory.NextStoryRange
        Loop Until rngStory Is Nothing
    Next
End Function

Sub SetCrossRefStyle()
'
' 1. Get all text ranges since Selection.Find only works on document body, but not on headers/footers
' 2. Add CHARFORMAT to make styling persistent
' 3. Add styling to all references
'
    Dim textRanges As Collection
    Set textRanges = m_GetAllTextRanges
    ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
    m_SetCHARFORMAT textRanges
    m_AddCrossRefStyle textRanges
    ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
End Sub
eymre
źródło