เป็นไปได้หรือไม่ที่จะกำหนดสไตล์เฉพาะให้กับการอ้างอิงโยงทั้งหมดใน Word 2007


32

ไม่มีอะไรเพิ่มเติมที่จะเพิ่มฉันต้องการเปลี่ยนรูปแบบของการอ้างอิงโยงข้ามทั้งหมดที่ฉันมีในเอกสาร Word 2007 ในครั้งเดียว แต่ฉันไม่รู้ว่าจะทำยังไง สิ่งนี้สามารถทำได้?


เป็นคำถามที่ดีฉันไม่สามารถหาอะไรเร็วและสกปรก แต่ฉันคิดว่ามันเกี่ยวข้องกับสไตล์ของเอกสารทั้งหมด
Ivo Flipse

1
@Ivo, ใช่ฉันคิดว่าเกินไปที่จะเป็นสิ่งที่เกี่ยวข้องกับรูปแบบของเอกสาร แต่ผมเป็นนักพัฒนาซอฟแวร์ที่ไม่ดีที่ไม่มีประสบการณ์มากกับ Word :)
เป็ด


ใช่คำตอบที่ดีขอบคุณมากมากน่าสนใจมาก
เป็ด

คำตอบ:


38

การอ้างอิงโยงบางประเภทจะถูกจัดรูปแบบโดยอัตโนมัติด้วยสไตล์ "การอ้างอิงที่รุนแรง" แต่ส่วนใหญ่จะจัดรูปแบบเป็นข้อความ "ปกติ"

หากต้องการใช้สไตล์ "การอ้างอิงที่รุนแรง" กับข้อความของการอ้างอิงโยง:

  • เลือกข้อความ
  • เลือกแท็บ "บ้าน" ในริบบิ้น
  • ใช้ปุ่มขึ้นหรือลงในกลุ่ม "สไตล์" ของริบบิ้นเลือกสไตล์ "การอ้างอิงที่รุนแรง" (หรือสไตล์อื่นหากคุณต้องการ)

หากต้องการเปลี่ยนลักษณะที่ปรากฏของข้อความทั้งหมดของสไตล์ที่กำหนด:

  • เลือกแท็บ "บ้าน" ในริบบิ้น
  • ใช้ปุ่มเลื่อนลงในกลุ่ม "สไตล์" ของ ribbon เลือก "ใช้สไตล์ ... "
  • ในกล่องโต้ตอบ "ใช้ลักษณะ" ภายใต้ "ชื่อสไตล์" เลือกชื่อของสไตล์ที่คุณต้องการเปลี่ยน (เช่น "การอ้างอิงที่รุนแรง")
  • คลิกปุ่ม "แก้ไข ... "
  • เปลี่ยนการจัดรูปแบบเพื่อให้เหมาะกับคุณและคลิก "ตกลง"

หากต้องการใช้สไตล์กับการอ้างอิงโยงทั้งหมดในครั้งเดียว:

  • กดAlt+ F9เพื่อแสดงรหัสฟิลด์
  • เลือกแท็บ "หน้าแรก" ใน ribbon
  • คลิกที่ "แทนที่" ในกลุ่ม "แก้ไข"
  • ในฟิลด์ "ค้นหาอะไร" ให้พิมพ์ ^19 REF
    • (นั่นคือ caret-one-nine-space-REF)
  • คลิกในฟิลด์ "แทนที่ด้วย" แต่อย่าพิมพ์อะไรเลย
  • คลิกปุ่ม "เพิ่มเติม"
  • ส่วนด้านล่างของกล่องโต้ตอบควรมีชื่อว่า "แทนที่" (ด้วยกฎแนวนอนหลังจากนั้น)
  • คลิกปุ่ม "รูปแบบ" และเลือก "สไตล์ ... "
  • เลือกสไตล์ (เช่น "การอ้างอิงที่เข้มข้น") และคลิกตกลง
  • ตอนนี้ควรแสดงสไตล์ที่คุณเลือกภายใต้ฟิลด์ "แทนที่ด้วย"
  • คลิก "แทนที่ทั้งหมด" หากคุณรู้สึกกล้าหาญหรือใช้ "ค้นหาถัดไป" และ "แทนที่" เพื่อก้าวผ่านและแทนที่หรือข้ามสไตล์ของรหัสเขตข้อมูลอ้างอิงแต่ละรายการ
  • กดAlt+ F9เพื่อซ่อนรหัสฟิลด์

ดูหน้านี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรหัสพิเศษในค้นหาและแทนที่

นี่คือมาโครที่จะเพิ่มสวิตช์\* mergeformatไปยังแต่ละฟิลด์ สวิตช์นี้จำเป็นต่อการจัดรูปแบบจากการสูญหายถ้าคุณทำการปรับปรุงเขตข้อมูล คุณสามารถกำหนดแมโครให้กับการกดแป้นและมันจะผ่านฟิลด์หนึ่งทีละครั้งสำหรับแต่ละครั้งที่คุณกดการกดแป้น คุณยังสามารถแก้ไขแมโครเพื่อวนรอบเอกสารทั้งหมดเพื่อทำให้กระบวนการเป็นไปโดยอัตโนมัติ

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

ในความเป็นจริงการอ้างอิงส่วนใหญ่หากไม่ใช่ทั้งหมดจะถูกสร้างขึ้นตามค่าเริ่มต้นด้วยข้อความปกติ ขอบคุณสำหรับคำตอบ แต่ในกรณีนี้ฉันต้องกำหนดสไตล์ของแต่ละคนด้วยตนเองก่อนที่ฉันจะสามารถอัปเดตสไตล์ทั้งหมดได้ในครั้งเดียว ฉันกำลังมองหาวิธีการที่สามารถ automatize ขั้นตอนแรกของกระบวนการ
เป็ด

6
ว้าวผมไม่ทราบว่านี้ใช้ขั้นสูงของการค้นหา / แทนที่ที่เป็นประโยชน์มาก
เป็ด

6
คำตอบของคุณคืออัญมณีเล็ก ๆ แห่งความรู้แบบย่อ คุ้มค่ากับวิกิของตัวเอง!
หน้าตาบูดบึ้งของ Despair

5
พระเยซูคริสต์ ... มันใช้งานได้ดี แต่สิ่งนี้คือ: ทำไมจึงยากที่จะใช้รูปแบบการอ้างอิงข้าม!? ;)
Leniel Maccaferri

บน MS Word 16.9.1 บน Mac ใช้งานได้ (ไม่ได้ลองใช้มาโคร) แต่การค้นหา / แทนที่ไม่ได้อยู่ใน ribbon หน้าแรก (ฉันคิดว่า?) แต่ในเมนูภายใต้ Edit-> Find-> Advanced ค้นหาและแทนที่ ...
Michael

5
  • กดAlt+ F9เพื่อแสดงรหัสฟิลด์
  • ใช้แมโครต่อไปนี้เพื่อเพิ่ม CHARFORMAT ไปยังการอ้างอิงโยงทั้งหมด แมโครนี้จะเพิ่มสตริงลงในฟิลด์เฉพาะเมื่อยังไม่มี

    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
  • ใช้มาโครนี้เพื่อจัดรูปแบบการอ้างอิงโยงทั้งหมดด้วยสไตล์ "การอ้างอิงแบบละเอียด" (ตรวจสอบให้แน่ใจว่าคุณมีสไตล์ดังกล่าวและแสดงรหัสฟิลด์):

    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
  • กดAlt+ F9เพื่อซ่อนรหัสฟิลด์


3

การแก้ไขแมโครที่อัปโหลดโดยไซบอร์กเราสามารถแสดงและซ่อนรหัสฟิลด์ได้โดยอัตโนมัติ เพื่อให้ทุกครั้งที่เราต้องการอัปเดตเราไม่จำเป็นต้องใช้รหัสฟิลด์สลับ ฉันใช้รหัสต่อไปนี้เพื่อเพิ่มการสลับรหัสฟิลด์

ActiveDocument.ActiveWindow.View.ShowFieldCodes = False

แมโครที่สมบูรณ์มีดังนี้:

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

นี่เป็นครั้งแรกที่ฉันใช้มาโครเพื่อเพิ่มความเร็วในการทำงานด้วยคำพูด ขอบคุณ cyborg สำหรับมาโครที่เป็นประโยชน์เช่นนี้


0

วิธีที่รวดเร็วและมีประสิทธิภาพ:

  1. เลือกข้อความที่มีการจัดรูปแบบที่คุณต้องการใช้สำหรับการอ้างอิง
  2. เลือกแท็บหน้าแรกในริบบิ้น
  3. คลิกขวาที่สไตล์ปกติและเลือกอัปเดตปกติเพื่อให้ตรงกับส่วนที่เลือกการปรับปรุงปกติจะตรงกับการเลือก
  4. ปรับปรุงการอ้างอิงกับCtrl+ ,AF9

0

แมโครนี้เปิดกล่องโต้ตอบการอ้างอิงโยงเพื่อแทรกการอ้างอิงโยงที่ตำแหน่งเคอร์เซอร์ปัจจุบัน

เมื่อคุณปิดกล่องโต้ตอบ Xref หลังจากใส่การอ้างอิงแมโครจะกลับมาทำงานต่อเพื่อจัดรูปแบบการอ้างอิงไขว้ที่แทรกไว้กับตัวยก

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

ขอบคุณGraham Skan ที่ ExpertsExchangeสำหรับวิธีเปิดบทสนทนา Xref


0

รวมคำตอบข้างต้นเข้ากับฟังก์ชั่นอื่นเพื่อวนดูเอกสาร 'เรื่องราว' เพื่อใช้สไตล์ในตัวเอกสารส่วนหัวส่วนท้ายและข้อความบนรูปร่าง

เพียงเรียกแมโคร SetCrossRefStyle () ด้านล่างเพื่อใช้สไตล์ "การอ้างอิงที่เข้มข้น" กับการอ้างอิงข้ามทั้งหมด

Sub m_SetCHARFORMAT(textRanges As Collection)
' https://superuser.com/questions/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)
' https://superuser.com/questions/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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.