Я работаю над учебником, созданным с использованием Excel (давайте не будем обсуждать недостатки использования Excel для этого, я хорошо их знаю), и у меня есть список предложений с выделенным только одним словом - т.е. в другой цвет. По некоторым причинам некоторые из невыделенных слов оказались черными (# 000), а другие - темно-серыми (# 333). Чтобы это исправить, и поскольку у нас есть буквально более 1000 предложений, я попытался создать макрос. Некоторый поиск в Google привел меня к следующему коду:
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 обычно дает сбой (даже если он успешно выполнен хотя бы один раз), результаты несовместимы даже для одной и той же ячейки при разных запусках…
Я попробовал это на macOS с последними версиями Excel и OS, на виртуальной машине Windows, на нескольких машинах с Windows ... единственное, что соответствует, - это насколько это противоречиво.
Так что мой вопрос двоякий:
1- Являются ли макросы / действительно ли VBA ненадежными / противоречивыми?
2- Есть ли лучший способ реализовать эту функцию?