1

我对 Visual Basic 和宏很陌生。我一直在尝试做的是创建一个宏,它将查看整个文档并检查是否有任何字体是红色的;如果它是红色的,那么我想将红色字体更改为白色字体。

我知道我的代码是错误的,但谁能告诉我我做错了什么?

Sub red()

  If Font.Color =wdColorRed Then
  Font.Color = -603914241
End Sub
4

2 回答 2

3

您可以使用以下相当快的方法(每张纸都不需要循环)。

Sub Macro1()
Application.ScreenUpdating = False 'disable the screen from updating, i.e, avoid excel redrawing the screen after each color change we make
Application.FindFormat.Font.Color = 255
Application.ReplaceFormat.Font.Color = 16777215
Cells.Select
Selection.Replace What:="", Replacement:="", MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
Application.ScreenUpdating = True 'enable screen updating
End Sub

字体颜色可能有点棘手。因此,要找出您想要的颜色,请选择一个单元格并将颜色更改为您需要知道数字的颜色。然后转到您的开发人员屏幕并查看 -> 即时窗口(或按 Ctrl+G)。然后在立即窗口中(现在应该在屏幕底部,您想知道的颜色的单元格仍处于选中状态,输入

? Selection.Font.Color

这将为您提供您感兴趣的颜色。然后将这些数字放在上面的 Application.Find/ReplaceFormat.Font.Color 中。

这将适用于选定的工作表,您可以简单地将其放入循环中并遍历工作簿中的所有工作表以全部更改它们。

于 2013-05-18T18:06:13.150 回答
1

是你要找的吗?

这里复制@Todd 主要答案。

Sub ChangeColorWithReplace()
    Selection.Find.ClearFormatting
    Selection.Find.Font.Color = wdColorRed
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Font.Color = -603914241
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchKashida = False
        .MatchDiacritics = False
        .MatchAlefHamza = False
        .MatchControl = False
        .MatchByte = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
于 2013-05-18T18:02:04.293 回答