更改单元格文本的某些颜色:宏行为不一致

时间:2019-03-25 08:58:03

标签: excel vba

我正在研究使用Excel制作的教科书(我们不讨论使用Excel的缺点,我很清楚它们),并且我列出了一个句子列表,其中仅突出显示了一个单词,即不同的颜色。由于某些原因,一些未突出显示的单词最终变成了黑色(#000),而另一些变成了深灰色(#333)。为了解决这个问题,由于我们实际上有1000多个句子,因此我尝试制作一个宏。一些谷歌搜索使我进入以下代码:

Sub FixG2Colors()
'
'
   Dim xOut As String
   Dim xValue As String
   Dim i As Long
   Dim LastRow As Long

   LastRow = Cells(Rows.Count, "C").End(xlUp).Row

   Do Until ActiveCell.Row > LastRow

   xValue = ActiveCell.Text

   For i = 1 To Len(xValue)
       If (Not ActiveCell.Characters(i, 1).Font.Color = RGB(153, 102, 255)) Then
           ActiveCell.Characters(i, 1).Font.Color = vbBlack
       End If
   Next

   ActiveCell.Offset(4, 0).Select

   Loop

End Sub 

因此,我要遍历每个字符并将其颜色与突出显示的颜色进行比较;如果不同,则将其设置为黑色。这些句子每隔第四行,因此我将其从第一个选定单元格到工作表末尾的循环运行。

我的问题是我的行为变得异常不一致。在大多数情况下,卸下循环并运行循环即可正常工作。在某些情况下,单元格内容会被有效地修改。例如:

Actually, I was hoping / you could help me / with this problem.

突出显示“实际上”。运行宏不仅会删除突出显示(我对其进行了三遍和两遍的检查:它是RGB(153,102,255)),还更改了字体在句子的看似随机的部分。我打开文件,运行宏;关闭文件而不保存并再次打开;在同一句子上运行宏,字体将在之前的不同部分更改。

它也可以在其他句子上正常工作。

当我尝试运行循环时,它花费的时间要长得多,Excel通常会崩溃(即使它至少已成功运行了一次),即使对于不同运行的同一单元格,结果也不一致……

我在具有最新Excel和OS的macOS上,Windows VM和几台Windows机器上尝试了此操作……唯一一致的是不一致的情况。

所以我的问题有两个: 1-宏/ VBA真的不可靠/不一致吗? 2-是否有更好的方法来实现此功能?

1 个答案:

答案 0 :(得分:0)

根据我的评论;我将循环到最后一行,此代码已在一个带有多个彩色字符的小示例上进行了测试...(基于@ Gary'sStudent的代码)

Sub fixFontColor()
    Dim r As Long, x As Integer, lRow As Long
    lRow = Cells(Rows.Count, "C").End(xlUp).Row

        For r = 1 To lRow 'Number of rows

            For x = 1 To Len(Cells(r, 3).Value) 'for each character in cell

                If Cells(r, 3).Characters(Start:=x, Length:=1).Font.Color <> RGB(153, 102, 255) Then
                    Cells(r, 3).Characters(Start:=x, Length:=1).Font.Color = RGB(0, 0, 0)
                End If

            Next x

        Next r
End Sub