选择非粗体文本并更改其颜色(选定段落的)- MS Word VBA 宏

Posted

技术标签:

【中文标题】选择非粗体文本并更改其颜色(选定段落的)- MS Word VBA 宏【英文标题】:Select unbolded text & change its colour (of a selected paragraph)- MS Word VBA Macro 【发布时间】:2017-03-08 14:28:47 【问题描述】: 我想在 MS Word 2010 文档中选择一段文本。 然后使用宏:选择非粗体文本并将该文本的颜色更改为蓝色

注意:我不想对整个文档文本执行此操作,只是对我选择的段落/文本块执行此操作)

图片展示了我想做的事情:

我尝试创建以下宏 - 但由于某种原因,它使所有文本(粗体和非粗体)都变成蓝色

    Sub MakeUnboldedTextBlue()
'
' MakeUnboldedTextBlue Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Font.Bold = False
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindAsk
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchKashida = False
        .MatchDiacritics = False
        .MatchAlefHamza = False
        .MatchControl = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Font.Color = 15773696
End Sub

更新: 我还想从“氰化”中排除项目符号(如果可能的话)

例如: Example of the bullet symbols not being cyanized

【问题讨论】:

【参考方案1】:

查看所选文本中的每个字符,如果不是粗体,则对其着色:

Option Explicit

Sub CyanizeNonBoldInSelection()
    Dim oRange As range
    Dim oChar As range
    Dim oListFormat As ListFormat

    Application.UndoRecord.StartCustomRecord "CyanizeNonBoldInSelection"

    Set oRange = Selection.range

    For Each oChar In oRange.Characters

        If oChar.Bold = False Then

            oChar.Font.ColorIndex = wdTurquoise

            If oChar.ListParagraphs.Count > 0 Then
                Set oListFormat = oChar.ListParagraphs(1).range.ListFormat
                oListFormat.ListTemplate.ListLevels(oListFormat.ListLevelNumber).Font.ColorIndex = wdTurquoise
            End If

        End If
    Next oChar

    Application.UndoRecord.EndCustomRecord

End Sub

【讨论】:

这太完美了!谢谢!如果可能的话,我还有一个要求。如果我想“氰化”不包括项目符号的非粗体文本,这可能吗? 如果 oChar.Bold = False And oChar.ListFormat.ListType wdListBullet Then 谢谢,但它并不能如我所愿。建议的更改意味着项目符号旁边的任何文本都不是“青色”(无论是粗体还是非粗体)。我希望所有非粗体文本都被氰化,而不是项目符号符号。为麻烦道歉,如果我的请求是可能的,请告诉我?我已经用一张图片编辑了原始帖子来说明这一点。 哦,你的意思是子弹本身应该是青色的? 不,子弹应该是黑色的/保持原来的颜色。例如i.stack.imgur.com/Thw1C.png。您推荐的更改(如果 oChar.Bold = False And oChar.ListFormat.ListType wdListBullet Then)基本上可以防止项目符号旁边的任何文本被蓝化。

以上是关于选择非粗体文本并更改其颜色(选定段落的)- MS Word VBA 宏的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AngularJS 实现粗体的非粗体功能

MFC 中的粗体标签

python文本颜色设置

contentEditable div 中的粗体选定文本,使用纯 JavaScript,不使用 jQuery 等库

VirtualTreeView - 同一节点中不同颜色的文本

如何更改 Flutter 中提升按钮的选定文本的颜色?