【问题标题】:Word VBA - Applying alternate font color via styles does not work with text that has direct formatting (of font color) appliedWord VBA - 通过样式应用替代字体颜色不适用于应用了直接格式(字体颜色)的文本
【发布时间】:2020-04-17 23:57:23
【问题描述】:

我创建了一个模板(一系列许多类似模板中的一个),该模板将分发给多个用户,用于创建(音频和数字文件的)转录本。成绩单包括一些专门用于格式化文本的样式。

该模板包含一系列宏,可临时更改每种自定义样式的字体颜色,以帮助快速校对格式,然后使用另一个宏将它们全部更改回黑色/自动字体颜色.

只要在任何自定义样式中都没有直接格式化字体颜色,这个过程就可以顺利进行。但是,我正在考虑某些用户可能会选择选择所有文本并使用直接格式化方法将临时彩色字体恢复为黑色的可能性。如果他们这样做,它会使所有以颜色为中心的宏(更改为颜色,更改回黑色)无用。

这可能会带来很大的问题,因为这些用户生成的成绩单最终会提交给分包商,分包商可能希望自己使用以颜色为中心的宏进行额外的校对,然后再将最终成绩单提交给她的客户。但如果用户应用了字体颜色的直接格式,它们将不再起作用。

通过使用“清除格式”选项,然后重新应用样式,我能够手动和通过宏删除直接格式化字体颜色。但这不是解决这个难题的实际解决方案,因为任何给定的段落都可能包含其他属性,例如粗体、下划线或斜体文本,当应用“清除格式”选项时,这些属性会丢失。我曾考虑将字符样式应用于这些属性,但我无法保证用户会使用它们,因此在尝试处理潜在的字体颜色问题时仍然存在丢失属性的风险。

我在 Word 中进行了详尽的实验,并在帮助文件中以及在 Google 上进行了广泛搜索,但我找不到任何有助于仅删除相对于字体颜色的直接格式同时保持其他直接格式属性不变的信息,以便我可以使用宏来改变样式中的字体颜色。

我是不是只见树木不见森林,而这一切都错了?还是我的宏代码中缺少一个可以解决此问题的小元素?

我复制了下面两个主要的以颜色为中心的宏。实际上有 8 个附加宏属于同一类别,因为我还为用户提供了更改单个样式以及 QUESTION 和 ANSWER 样式中的字体颜色的选项(同时不更改任何其他样式)。但它们只是下面显示的代码的相同 sn-ps,配对以处理个别样式。

提前感谢您的帮助!

将所有样式更改为不同的颜色:

    Sub STYLES_AllColors()

        With ActiveDocument.Styles("#CENTERED (DS)")
                .Font.ColorIndex = wdGray50
        End With

        With ActiveDocument.Styles("#FLUSH LEFT (DS)")
                .Font.ColorIndex = wdDarkYellow
        End With

        With ActiveDocument.Styles("#PARENTHETICAL")
                .Font.ColorIndex = wdViolet
        End With

        With ActiveDocument.Styles("#QUESTION (looped)")
                .Font.ColorIndex = wdRed
        End With

        With ActiveDocument.Styles("#ANSWER (looped)")
                .Font.ColorIndex = wdBlue
        End With

        With ActiveDocument.Styles("#QA2 (continuing paragraph)")
                .Font.ColorIndex = wdTurquoise
        End With

        With ActiveDocument.Styles("#QA (plain format)")
                .Font.ColorIndex = wdDarkRed
        End With

    End Sub

将所有样式改回黑色/自动:

    Sub STYLES_AllBlack()

        With ActiveDocument.Styles("#CENTERED (DS)")
                .Font.Color = wdColorAutomatic
        End With

        With ActiveDocument.Styles("#FLUSH LEFT (DS)")
                .Font.Color = wdColorAutomatic
        End With

        With ActiveDocument.Styles("#PARENTHETICAL")
                .Font.Color = wdColorAutomatic
        End With

        With ActiveDocument.Styles("#QUESTION (looped)")
                .Font.Color = wdColorAutomatic
        End With

        With ActiveDocument.Styles("#ANSWER (looped)")
                .Font.Color = wdColorAutomatic
        End With

        With ActiveDocument.Styles("#QA2 (continuing paragraph)")
                .Font.Color = wdColorAutomatic
        End With

        With ActiveDocument.Styles("#QA (plain format)")
                .Font.Color = wdColorAutomatic
        End With

    End Sub

【问题讨论】:

  • 这个问题最好在最终用户论坛中提出,您更有可能在 Answers 网站上找到其他专业处理文档的人。使用 Word,如果您无法在 UI 中完成,通常无法使用宏完成,这是一个很好的经验法则。 FWIW 我相信您需要为粗体和斜体等内容提供字符样式。而且您需要“调整” UI 以禁用/隐藏内置命令。这将包括模板中的功能区,其粗体和斜体按钮应用您的样式,以及重新映射键盘快捷键。这一切皆有可能……
  • 感谢您的回复,辛迪。我不知道答案网站。当谈到知道如何充分利用这个网站及其有用信息的宝库时,我仍然是绿色的。同时,我可能已经找到了一个合适的解决方法,至少现在是这样(我将添加到我的原始帖子中)。如果这被证明有问题,我将使用您的建议在答案网站上发布。谢谢!

标签: vba ms-word


【解决方案1】:

我可能已经找到了答案,或者至少现在找到了一个合适的解决方法。

经过更多实验,似乎即使直接格式化(字体颜色)已应用于文本,如果我使用查找/替换方法搜索单个样式并更改宏生成的字体更改将起作用字体,而不是像我一样将字体更改直接应用于样式(在宏内)。这导致了许多额外的格式样式,但我可以为用户提供说明和工具来防止和/或消除格式窗格上的混乱。

因此,除非有人提出更优雅的解决方案,否则我现在将采用这种解决方案。这是个人风格的代码的 sn-p。我将不得不扩展它以涵盖所有样式,并创建一个配套宏来删除所有颜色。

     Selection.Find.ClearFormatting
        Selection.Find.Style = ActiveDocument.Styles("#QUESTION (looped)")
        Selection.Find.Replacement.ClearFormatting
        Selection.Find.Replacement.Style = ActiveDocument.Styles( _
            "#QUESTION (looped)")
        With Selection.Find.Replacement.Font
        .Color = wdColorRed
        End With
        With Selection.Find
            .Text = ""
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
        End With
        Selection.Find.Execute Replace:=wdReplaceAll

【讨论】:

    【解决方案2】:

    我在使用 EndNote 管理参考书目时遇到了类似的问题。每次更新都会重新制作风格。我运行一个宏,它调用其他几个宏来放入链接和可选空格。我认为我运行的用于清理EndNote Bibliography 段落样式和段落实例的子例程可以为我使用的方案提供一个视图。

    我在下面包含了该代码,它也将减少直接样式的爆炸式增长。

    我首先确保样式本身是我想要的。然后我转到每个实例并将其设置为相同。现在,这些是段落,字体风格相似。如果你还在看这个问题,请告诉我,我会写出字体代码。它可以使用只运行一组样式和颜色的子例程。

    Private Sub EndNoteStyleFixup(d As Document, r As Range)
    '
    ' EndNoteBibliographyStyleFix Macro
    '
    '
        Dim ENStyle As Style
        Dim p As Paragraph
        Dim pCnt As Long
    
        Set ENStyle = Nothing
        On Error Resume Next
        Set ENStyle = d.Styles("EndNote Bibliography")
        On Error GoTo 0
        If ENStyle Is Nothing Then
            'done
        Else
            pCnt = 0
            With ENStyle
               .Font.name = "Times New Roman"
               .Font.Size = 10.5
               With .ParagraphFormat
                    .LeftIndent = InchesToPoints(0.25)
                    .RightIndent = InchesToPoints(0)
                    .SpaceBefore = 0
                    .SpaceBeforeAuto = False
                    .SpaceAfter = 2
                    .SpaceAfterAuto = False
                    .LineSpacingRule = wdLineSpaceSingle
                    .Alignment = wdAlignParagraphLeft
                    .WidowControl = True
                    .KeepWithNext = False
                    .KeepTogether = False
                    .PageBreakBefore = False
                    .Hyphenation = True
                    .FirstLineIndent = InchesToPoints(-0.25)
                    .OutlineLevel = wdOutlineLevelBodyText
                    .CharacterUnitLeftIndent = 0
                    .CharacterUnitRightIndent = 0
                    .CharacterUnitFirstLineIndent = 0
                    .LineUnitBefore = 0
                    .LineUnitAfter = 0
                    .MirrorIndents = False
                    .TextboxTightWrap = wdTightNone
                    doEndNoteTabs .TabStops
                End With
                .NoSpaceBetweenParagraphsOfSameStyle = False
                .AutomaticallyUpdate = False
                .BaseStyle = "Normal"
                .NextParagraphStyle = "EndNote Bibliography"
            End With
            For Each p In r.Paragraphs
                If ENStyle = p.Style Then
                    p.Range.Select
                    With p.Range
                            .Font.name = "Times New Roman"
                            .Font.Size = 10.5
                        With .ParagraphFormat
                            .LeftIndent = InchesToPoints(0.25)
                            .RightIndent = InchesToPoints(0)
                            .SpaceBefore = 0
                            .SpaceBeforeAuto = False
                            .SpaceAfter = 2
                            .SpaceAfterAuto = False
                            .LineSpacingRule = wdLineSpaceSingle
                            .Alignment = wdAlignParagraphLeft
                            .WidowControl = True
                            .KeepWithNext = False
                            .KeepTogether = False
                            .PageBreakBefore = False
                            .Hyphenation = True
                            .FirstLineIndent = InchesToPoints(-0.25)
                            .OutlineLevel = wdOutlineLevelBodyText
                            .CharacterUnitLeftIndent = 0
                            .CharacterUnitRightIndent = 0
                            .CharacterUnitFirstLineIndent = 0
                            .LineUnitBefore = 0
                            .LineUnitAfter = 0
                            .MirrorIndents = False
                            .TextboxTightWrap = wdTightNone
                            doEndNoteTabs .TabStops
                        End With
                    End With
                    p.Style = ENStyle
                End If
            Next p
        End If
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多