È possibile assegnare uno stile specifico a tutti i riferimenti incrociati in Word 2007?


32

Nient'altro da aggiungere, vorrei cambiare lo stile di tutti i riferimenti incrociati che ho in un documento Word 2007 contemporaneamente. Ma non ho idea di come farlo. Come si può fare?


Bella domanda, non sono riuscito a trovare nulla di veloce e sporco. Ma penso che sia legato allo stile dell'intero documento
Ivo Flipse,

1
@Ivo, sì, penso anche che sia qualcosa legato allo stile del documento, ma sono un povero sviluppatore SW con poca esperienza con Word :)
Drake,

@marco: vedi la mia risposta aggiornata
In pausa fino a nuovo avviso.

si, ottima risposta grazie mille, molto molto interessante
Drake,

Risposte:


38

Alcuni tipi di riferimenti incrociati vengono formattati automaticamente con lo stile "riferimento intenso", ma la maggior parte viene formattata come testo "normale".

Per applicare lo stile di "riferimento intenso" al testo del riferimento incrociato:

  • seleziona il testo
  • scegli la scheda "Home" nella barra multifunzione
  • utilizzando i pulsanti su o giù nel gruppo "Stili" della barra multifunzione, scegliere lo stile "riferimento intenso" (o un altro stile se si preferisce)

Per modificare l'aspetto di tutto il testo di un determinato stile:

  • scegli la scheda "Home" nella barra multifunzione
  • utilizzando il pulsante a discesa nel gruppo "Stili" della barra multifunzione, selezionare "Applica stili ..."
  • nella finestra di dialogo "Applica stili" in "Nome stile" scegli il nome dello stile che desideri modificare (ad es. "riferimento intenso")
  • Fai clic sul pulsante "Modifica ..."
  • Cambia la formattazione in base alle tue esigenze e fai clic su "OK"

Per applicare uno stile a tutti i riferimenti incrociati contemporaneamente:

  • Premere Alt+ F9per mostrare i codici di campo
  • Seleziona la scheda "Home" nella barra multifunzione
  • Fai clic su "Sostituisci" nel gruppo "Modifica"
  • Nel campo "Trova cosa", digita ^19 REF
    • (Questo è il punto di inserimento-uno-nove-spazio-RIF)
  • Fai clic nel campo "Sostituisci con", ma non digitare nulla
  • Fai clic sul pulsante "Altro"
  • La parte inferiore della finestra di dialogo dovrebbe essere intitolata "Sostituisci" (con una regola orizzontale dopo di essa)
  • Fai clic sul pulsante "Formato" e seleziona "Stile ..."
  • Scegli uno stile (ad es. "Riferimento intenso") e fai clic su OK
  • Ora dovrebbe mostrare lo stile selezionato nel campo "Sostituisci con"
  • Fai clic su "Sostituisci tutto" se ti senti coraggioso o usa "Trova successivo" e "Sostituisci" per scorrere e sostituire o saltare lo stile di ciascun codice di campo di riferimento singolarmente
  • Premi Alt+ F9per nascondere i codici di campo

Vedere questa pagina per ulteriori informazioni su codici speciali in Trova e sostituisci.

Ecco una macro che aggiungerà il parametro \* mergeformata ciascuno dei campi. Questa opzione è necessaria per evitare che la formattazione vada persa se si esegue un aggiornamento sul campo. È possibile assegnare la macro a una sequenza di tasti e questo farà scorrere i campi uno alla volta per ogni volta che si preme la sequenza di tasti. È inoltre possibile modificare la macro per eseguire il ciclo sull'intero documento per automatizzare il processo.

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

infatti la maggior parte dei riferimenti se non tutti sono creati di default con testo normale. Grazie per la risposta, ma in questo caso devo impostare manualmente lo stile di ognuno prima di poter aggiornare lo stile per tutti in una volta. Stavo cercando un metodo in grado di automatizzare il primo passo del processo
Drake,

6
wow, non sapevo che questo uso avanzato di trova / sostituisci, molto utile
Drake,

6
La tua risposta è una piccola gemma di conoscenza condensata. Vale la sua wiki!
Smorfia di disperazione,

5
Gesù Cristo ... funziona alla grande ma il fatto è: perché rendere così difficile applicare uno stile ai riferimenti incrociati !? ;)
Leniel Maccaferri,

su MS Word 16.9.1 su Mac, questo funziona (non ho provato la macro), ma trova / sostituisci non si trova sulla barra multifunzione di casa (penso?), ma invece nel menu Modifica-> Trova-> Avanzate Trova e sostituisci ...
Michael

5
  • Premere Alt+ F9per mostrare i codici di campo
  • Utilizzare la seguente macro per aggiungere CHARFORMAT a tutti i riferimenti incrociati. Questa macro aggiunge la stringa al campo solo se non è già presente.

    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
  • Utilizzare questa macro per formattare tutti i riferimenti incrociati con lo stile "Riferimento sottile" (assicurarsi di disporre di tale stile e che vengano visualizzati i codici di campo):

    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
  • Premi Alt+ F9per nascondere i codici di campo


3

modificando la macro caricata dal cyborg, possiamo facilmente automatizzare la visualizzazione e nascondere i codici di campo. in modo che ogni volta che desideriamo aggiornare non dobbiamo usare i codici di campo di attivazione / disattivazione. Ho usato il seguente codice per aggiungere il toggle di codice di campo.

ActiveDocument.ActiveWindow.View.ShowFieldCodes = False

La macro completa è la seguente:

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

Questa è la prima volta che utilizzo le macro per velocizzare il mio lavoro a parole. grazie cyborg per una macro così utile.


0

Modo rapido ed efficace:

  1. Seleziona del testo con il formato che desideri utilizzare per i riferimenti.
  2. Seleziona la scheda Home nella barra multifunzione.
  3. Fai clic con il pulsante destro del mouse sullo stile Normale e scegli Aggiorna normale per abbinare la selezione .
  4. Aggiornare i riferimenti con Ctrl+ A, F9.

0

Questa macro apre la finestra di dialogo Riferimento incrociato per inserire un riferimento incrociato nella posizione corrente del cursore.

Quando si chiude la finestra di dialogo Xrif dopo aver inserito il riferimento, la macro riprende per formattare il riferimento incrociato inserito in apice.

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

Grazie a Graham Skan a ExpertsExchange per come aprire il dialogo Xref.


0

Combinando le risposte sopra con un'altra funzione per scorrere le "storie" del documento, per applicare lo stile al corpo del documento, alle intestazioni, ai piè di pagina e al testo sulle forme.

È sufficiente chiamare la macro SetCrossRefStyle () di seguito per applicare lo stile "Riferimento intenso" a tutti i riferimenti incrociati.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.