【发布时间】:2019-03-25 21:48:23
【问题描述】:
我正在编写一本使用 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
所以,我将检查每个字符并将其颜色与突出显示颜色进行比较;如果不同,请将其设置为黑色。这些句子是每 4 行,所以我从第一个选定的单元格到工作表末尾的循环运行它。
我的问题是我的行为非常不一致。删除循环并运行循环正常工作......大多数时候。在某些情况下,单元格内容会被有效地修改。例如:
Actually, I was hoping / you could help me / with this problem.
突出显示“实际上”。运行宏不仅删除了高亮(我双重和三重检查:它是 RGB(153, 102, 255)),它还在句子的看似随机的部分更改字体。我打开文件,运行宏;关闭文件而不保存并再次打开它;在同一个句子上运行宏,字体会在不同的部分发生变化。
此外,它在其他句子上也能正常工作。
当我尝试运行循环时,它花费的时间比它应该的要长得多,Excel 通常会崩溃(即使它已经成功运行了至少一次),即使对于不同运行的同一个单元格,结果也不一致......
我在 macOS 上使用最新的 Excel 和操作系统、在 Windows 虚拟机上、在几台 Windows 机器上进行了尝试……唯一一致的是,这是多么不一致。
所以我的问题有两个: 1-宏/VBA真的这么不可靠/不一致吗? 2- 有没有更好的方法来实现这个功能?
【问题讨论】:
-
在我使用 VBA 的 2 年经验中,我从未遇到过您描述的不一致。但是我看不出代码有什么问题。工作簿中是否还有其他代码?有什么活动吗?你是如何调用/运行 Sub 的?您是否尝试过通过 F8 逐步执行该过程以查看实际发生的情况?
-
您的文字在哪些列中?
-
@SpringFilip 就像我说的,这是我的第一个 VBA 宏,所以我像尼安德特人一样做: alt-F11 打开编辑器,创建一个新模块,将文本粘贴到那里,然后单击编辑器上的“运行宏”按钮。编辑器只显示 Microsoft Excel 对象和我所做的模块,据我所知,没有其他代码或事件。我从未尝试过停止该程序;我试试看。
-
@GMalc 文本位于 C 列,我运行此宏时选择了 C 列中的一个单元格。
-
我不明白你在这一行中试图完成什么
Do Until ActiveCell.Row > LastRow;如果LastRow是一个“大于1000”的数字,那么如果你的ActiveCell.Row是C1,它怎么可能是>1000?您需要遍历每一行;例如For x = 1 to LastRow