【问题标题】:Macro to change colors of specific characters in a range用于更改范围内特定字符颜色的宏
【发布时间】:2022-04-27 02:43:40
【问题描述】:

我想为我的工作表开发一个宏,它可以选择一个范围并根据其颜色更改特定字符的颜色。这是similarly answered before here,我将 Gary 的学生代码作为脚本的基础。它奏效了,但我注意到了一个我无法解决的小问题。

当我的单元格已经以与模式不同颜色的值开始时,它只会将第一个字符更改为我想要的颜色,并将其旁边的其余字符和单词更改为模式。它只发生在这种情况下,对于其他以黑色(图案)开头的单元格,它可以完美地工作。

Ex.: 假设斜体字是red(我要改变的颜色),粗体字是blue(代替红色的颜色),其余的是自动颜色(黑色):

应用宏之前的单元格值:这是一个值。 应用宏后的单元格值:T这是一个值。

我已经搜索过了,没有成功。
可能是 Excel 错误或脚本中的错误?

请参阅下面的代码版本:

Sub ColorChange()
   Dim I As Long, J As Long, K As Long 'I = Rows, K = Columns, J = Chars
   For K = 6 To 8 'For columns F to H
       For I = 2 To 200 'For rows 2 to 200
           For J = 1 To Len(Cells(I, K).Value)
               If Cells(I, K).Characters(Start:=J, Length:=1).Font.Color <> vbAutomatic Then
                   Cells(I, K).Characters(Start:=J, Length:=1).Font.Color = RGB(226, 107, 10)
                   Cells(I, K).Characters(Start:=J, Length:=1).Font.Bold = True
               End If
           Next J
       Next I
   Next K
End Sub

【问题讨论】:

  • 如果单元格中所有文本的总长度小于 257 个字符,您只能更改单元格中文本子字符串的颜色。这是 Excel 中的一个已知错误。您的文本值是否小于 257 个字符?
  • 您可以发布示例数据和结果吗?
  • @ExcelHero 你有关于那个“已知错误”的文档吗?在什么版本?我在 Excel 2007 中使用超过 700 个字符的字符串进行了尝试,效果很好。
  • 这个错误出现在 2013 年。我认为(但不能 100% 确定它也出现在 2010 年)。我没有文档,但我已将其报告给 MS。
  • 您使用的是什么版本的 Excel?我在 Excel 2007 中尝试了代码,它按预期正常工作。你能澄清你对问题的描述(第二段)吗?这对我来说不是很清楚。也许一些例子会有所帮助。

标签: vba excel


【解决方案1】:

首先没有像vbAutomatic这样的颜色索引(嗯……color索引);相反,您需要使用 xlAutomatic (-4105) 来表示自动颜色选项。

其次,FontColor 属性将返回代表您选择的颜色的 RGB 值(0=黑色,224 – 1=白色),而不是您选择的选项的索引选择。我猜你在ColorIndex 属性之后,虽然检查Color=0 可能更明智:Black 字体颜色选项没有索引-4105,但索引1 .

因此,更新的J 循环:

       For J = 1 To Len(Cells(I, K).Value)
           If Cells(I, K).Characters(Start:=J, Length:=1).Font.Color <> 0 Then
               Cells(I, K).Characters(Start:=J, Length:=1).Font.Color = RGB(226, 107, 10)
               Cells(I, K).Characters(Start:=J, Length:=1).Font.Bold = True
           End If
       Next J

【讨论】:

  • 非常好的观点,但我认为这不会改变任何事情。 VB 在到达...Color &lt;&gt; vbAutomatic 时会进行隐式转换以匹配两种不同的类型,因此它将vbAutomatic 转换为Long 并赋予其值0。最终结果与您的代码Color &lt;&gt; 0 相同。话虽如此,我完全同意您的观点以及代码应该如何。
  • 关于转换的要点很好。您可能会说我谨慎使用变体。至于未声明的变量,代码模块顶部的Option Explicit 指令将阻止这些变量被输入。
  • 是的,必须使用Option Explicit :-)。没有它,我从来没有在 VB 中编程过。
  • @AdamFrederickWiseman 感谢您的回答。最终结果在这里也是一样的。奇怪的是代码可以工作,只有当单元格已经以不同的颜色开始时才会发生错误。
  • @Mumumurilo 你看到我最后的评论了吗?它在 Excel 2007 中对我来说工作正常。我没有 2013 来测试。您的代码只是将 更改为一种颜色(棕色),因此如果您说它将其他字符更改为另一种颜色(黑色),那么它不是您的代码。也许是一个错误(我不这么认为)或其他一些代码。创建一个新文件并将此函数复制到其中,以便您可以对其进行测试,而不会干扰其他代码。
【解决方案2】:

当我在单元格中有公式时,我遇到了同样的问题。在我将它们复制/粘贴为值后,我的宏没有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多