it-swarm.dev

¿Es posible asignar un estilo específico a todas las referencias cruzadas en Word 2007?

Nada más que agregar, me gustaría cambiar el estilo de todos referencias cruzadas Tengo en un documento de Word 2007 a la vez. Pero no tengo idea de cómo hacerlo. ¿Cómo se puede hacer esto?

29
Drake

Algunos tipos de referencias cruzadas se formatean automáticamente con el estilo de "referencia intensa", pero la mayoría se formatea como texto "normal".

Para aplicar el estilo de "referencia intensa" al texto de la referencia cruzada:

  • selecciona el texto
  • elige la pestaña "Inicio" en la cinta
  • utilizando los botones arriba-abajo o el botón desplegable en el grupo "Estilos" de la cinta, elija el estilo de "referencia intensa" (u otro estilo si lo prefiere)

Para cambiar la apariencia de todo el texto de un estilo dado:

  • elige la pestaña "Inicio" en la cinta
  • usando el botón desplegable en el grupo "Estilos" de la cinta, elija "Aplicar estilos ..."
  • en el cuadro de diálogo "Aplicar estilos" debajo de "Nombre de estilo", elija el nombre del estilo que desea cambiar (por ejemplo, "referencia intensa")
  • Haga clic en el botón "Modificar ..."
  • Cambie el formato a su gusto y haga clic en "Aceptar"

Para aplicar un estilo a todas las referencias cruzadas a la vez:

  • Prensa Alt+F9 para mostrar códigos de campo
  • Seleccione la pestaña "Inicio" en la cinta
  • Haga clic en "Reemplazar" en el grupo "Edición"
  • En el campo "Buscar qué", escriba ^19 REF
    • (Eso es caret-one-nine-space-R-E-F)
  • Haga clic en el campo "Reemplazar con", pero no escriba nada
  • Haga clic en el botón "Más"
  • La sección inferior del cuadro de diálogo debe titularse "Reemplazar" (con una regla horizontal después)
  • Haga clic en el botón "Formato" y seleccione "Estilo ..."
  • Elija un estilo (por ejemplo, "Referencia intensa") y haga clic en Aceptar
  • Ahora debería mostrar el estilo que seleccionó en el campo "Reemplazar con"
  • Haga clic en "Reemplazar todo" si se siente valiente o use "Buscar siguiente" y "Reemplazar" para avanzar y reemplazar u omitir el estilo de cada código de campo de referencia individualmente
  • Prensa Alt+F9 para ocultar códigos de campo

Consulte esta página para obtener más información sobre códigos especiales en Buscar y reemplazar.

Aquí hay una macro que agregará el interruptor \* mergeformat a cada uno de los campos. Este cambio es necesario para evitar que se pierda el formato si realiza una actualización de campo. Puede asignar la macro a una pulsación de tecla y recorrerá los campos de a uno por vez cada vez que presione la tecla. También puede editar la macro para recorrer todo el documento y automatizar el proceso.

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
37
Dennis Williamson
  • Prensa Alt+F9 para mostrar códigos de campo
  • Use la siguiente macro para agregar CHARFORMAT a todas las referencias cruzadas. Esta macro agrega la cadena al campo solo si aún no está allí.

    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
    
  • Use esta macro para formatear todas las referencias cruzadas con el estilo "Referencia sutil" (asegúrese de tener ese estilo y que se muestren los códigos de 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
    
  • Prensa Alt+F9 para ocultar códigos de campo

5
cyborg

editando la macro cargada por el cyborg, podemos automatizar fácilmente mostrar y ocultar los códigos de campo. para que cada vez que deseemos actualizar no tengamos que usar códigos de campo de alternancia. Utilicé el siguiente código para agregar la alternancia de código de campo.

ActiveDocument.ActiveWindow.View.ShowFieldCodes = False

La macro completa es la siguiente:

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

Esta es la primera vez que uso macros para acelerar mi trabajo en Word. gracias cyborg por tan útil macro.

3
Jaykrushna patel

Combinando las respuestas anteriores con otra función para recorrer las 'historias' del documento, para aplicar estilos en el cuerpo del documento, encabezados, pies de página y texto en formas.

Simplemente llame a la macro SetCrossRefStyle () a continuación para aplicar el estilo "Referencia intensa" a todas las referencias cruzadas.

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
0
eymre

Forma rápida y efectiva:

  1. Seleccione un texto con el formato que desea usar para las referencias.
  2. Seleccione la pestaña Inicio en la cinta.
  3. Haga clic derecho en el estilo Normal y elija Actualizar Normal para que coincida con la selección.
  4. Actualizar referencias con Ctrl + AF9.
0
Evgeny

Esta macro abre el cuadro de diálogo Referencia cruzada para insertar una referencia cruzada en la posición actual del cursor.

Cuando cierra el cuadro de diálogo Xref después de insertar la referencia, la macro se reanuda para formatear la referencia cruzada insertada al superíndice.

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

Gracias a Graham Skan en ExpertsExchange por cómo abrir el diálogo Xref.

0
TJH