Word 2007'deki tüm çapraz referanslara belirli bir stil atamak mümkün mü?


32

Eklenecek başka bir şey yok, bir Word 2007 belgesindeki tüm çapraz referansların stilini bir kerede değiştirmek istiyorum. Ama nasıl yapılacağı hakkında hiçbir fikrim yok. Bu nasıl yapılabilir?


Güzel soru, hızlı ve kirli bir şey bulamadım. Ancak bunun tüm belgenin stili ile ilgili olduğunu düşünüyorum
Ivo Flipse,

1
@Ivo, evet, ben de bunun belge tarzı ile ilgili bir şey olduğunu düşünüyorum, ancak Word ile fazla bir deneyime sahip yoksul bir SW geliştiricisiyim :)
Drake

@ marco: güncellenmiş cevabımı gör
sonraki bildirime kadar duraklatıldı.

evet, büyük cevap çok teşekkür ederim, çok çok ilginç
Drake 9

Yanıtlar:


38

Bazı çapraz referans türleri otomatik olarak "yoğun referans" stiliyle formatlanır, ancak çoğu "normal" metin olarak formatlanır.

"Yoğun referans" stilini çapraz referansın metnine uygulamak için:

  • metni seç
  • Şeritteki "Giriş" sekmesini seçin
  • Şeritteki "Stiller" grubundaki yukarı veya aşağı düğmelerini kullanarak "yoğun referans" stilini (veya isterseniz başka bir stili) seçin.

Belirli bir stildeki tüm metnin görünümünü değiştirmek için:

  • Şeritteki "Giriş" sekmesini seçin
  • Şeritteki "Stiller" grubundaki açılır düğmeyi kullanarak "Stilleri uygula ..." yı seçin.
  • "Stil Adı" altındaki "Stilleri Uygula" iletişim kutusunda değiştirmek istediğiniz stilin adını seçin (örn. "yoğun referans")
  • "Değiştir ..." düğmesini tıklayın
  • Biçimlendirmeyi size uyacak şekilde değiştirin ve "Tamam" ı tıklayın.

Tüm çapraz referanslara bir kerede bir stil uygulamak için:

  • Basın Alt+ F9Alan kodlarını göstermek için
  • Şeritte "Ev" sekmesini seçin
  • "Düzenleme" grubunda "Değiştir" i tıklayın
  • "Aranan" alanına ^19 REF
    • (Bu, dokuz kişilik bir boşluk olan REF)
  • "Şununla değiştir" alanını tıklayın, ancak hiçbir şey yazmayın
  • "Diğer" düğmesini tıklayın
  • İletişim kutusunun alt kısmı "Değiştir" olarak adlandırılmalıdır (bundan sonra yatay bir kuralla)
  • "Biçimlendir" düğmesini tıklayın ve "Stil ..." seçeneğini seçin
  • Bir stil seçin (örn. "Yoğun Referans") ve Tamam'ı tıklayın.
  • Şimdi "Şununla değiştir" alanı altında seçtiğiniz stili göstermelidir.
  • Cesur hissediyorsanız "Tümünü Değiştir" i tıklayın veya her referans alan kodunun stilini tek tek adımlamak veya atlamak için "Sonrakini Bul" ve "Değiştir" i kullanın.
  • Basın Alt+ F9gizlemek alan kodları

Bul ve Değiştir'teki özel kodlar hakkında daha fazla bilgi için bu sayfaya bakın .

Anahtarların \* mergeformatalanların her birine ekleyeceği bir makro . Bir alan güncellemesi yaparsanız, biçimlendirmenin kaybolmasını önlemek için bu anahtar gereklidir. Makroyu bir tuş vuruşuna atayabilirsiniz ve tuşlara her basışınızda alanlar birer birer birer adımlanır. Makroyu, işlemi otomatikleştirmek için tüm belgenin üzerinden geçirecek şekilde düzenleyebilirsiniz.

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

Aslında hepsi referans değil, hepsi normal metin ile varsayılan olarak oluşturulur. Cevabınız için teşekkür ederim, ancak bu durumda stili bir kerede güncelleyebilmem için her birinin stilini manuel olarak ayarlamak zorundayım. Sürecin ilk basamağını otomatize edebilecek bir yöntem arıyordum
Drake

6
vay, bul / değiştir'in bu gelişmiş kullanımını bilmiyordum, çok yardımcı oldu
Drake

6
Cevap, yoğunlaştırılmış bilginin küçük bir mücevher olduğunu Kendi wiki'sine değer!
Umutsuzluğun Suçu

5
İsa Mesih ... bu harika çalışıyor ama olay şudur: Çapraz Referanslara bir stil uygulamayı neden bu kadar zorlaştırıyor? ;)
Leniel Maccaferri 14:14

Mac’te MS Word 16.9.1’de bu çalışır (makroyu denememiştir), ancak bulma / değiştirme giriş şeridinde (sanırım?) değil, bunun yerine Düzenle-> Bul-> Gelişmiş’in altındaki menüde Bul ve Değiştir ...
Michael

5
  • Basın Alt+ F9Alan kodlarını göstermek için
  • Tüm çapraz referanslara CHARFORMAT eklemek için aşağıdaki makroyu kullanın. Bu makro, dizeyi yalnızca zaten orada değilse, alana ekler.

    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
  • Tüm çapraz referansları "İnce Referans" tarzıyla biçimlendirmek için bu makroyu kullanın (böyle bir stille sahip olduğunuzdan ve alan kodlarının gösterildiğinden emin olun):

    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
  • Basın Alt+ F9gizlemek alan kodları


3

cyborg tarafından yüklenen makroyu düzenleyerek, alan kodlarını gösterip gizlemeyi kolayca otomatikleştirebiliriz. Böylece her güncellemek istediğimizde, geçiş alan kodlarını kullanmak zorunda değiliz. Alan kodu geçişini eklemek için aşağıdaki kodu kullandım.

ActiveDocument.ActiveWindow.View.ShowFieldCodes = False

Makronun tamamı aşağıdaki gibidir:

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

Çalışmamı kelime olarak hızlandırmak için ilk kez makro kullanıyorum. Böyle yararlı makro için teşekkürler cyborg.


0

Hızlı ve etkili yol:

  1. Referanslar için kullanmak istediğiniz formata sahip bir metin seçin.
  2. Şeritteki Giriş sekmesini seçin .
  3. Normal stile sağ tıklayın ve seçimi eşleştirmek için Normal Güncelle'yi seçin .
  4. İle Güncelleme referanslar Ctrl+ A, F9.

0

Bu makro, mevcut imleç konumuna bir çapraz referans eklemek için Çapraz Referans iletişim kutusunu açar.

Referansı ekledikten sonra Xref diyalog kutusunu kapattığınızda makro eklenen çapraz referansı üst metne biçimlendirmek için devam eder.

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

Xref diyaloğunun nasıl açılacağı için ExpertsExchange'teki Graham Skan'a teşekkürler .


0

Belge gövdesi, üstbilgiler, altbilgiler ve metinlere şekillendirme uygulamak için belge 'öykülerinde' dolaşmak için yukarıdaki yanıtları başka bir işlevle birleştirmek.

Tüm çapraz referanslara "Yoğun Referans" tarzı uygulamak için aşağıdaki SetCrossRefStyle () makrosunu çağırmanız yeterlidir.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.