#vba #excel
#vba #excel
Вопрос:
Я пытаюсь изменить весь красный текст на черный во всех ячейках для всех листов рабочей книги Excel. Я использую следующее:
Sub RedToBlack()
Dim Current As Worksheet
For Each Current In Worksheets
For Each cell In Current
If cell.Font.ColorIndex = 3 Then
cell.Font.ColorIndex = 0
End If
Next
Next
End Sub
Я знаю, что это неправильно, но хотел дать представление о том, что я пытаюсь сделать. Кто-нибудь может дать совет? Спасибо за вашу помощь, я очень новичок в этом.
Ответ №1:
То, что у вас есть, вероятно, справилось бы с этой задачей. Однако это было бы крайне неэффективно. Лучшим способом было бы использовать функцию поиска и замены, подобную этой.
'set the next find to find the red
With Application.FindFormat.Font
.ColorIndex = 3
End With
'set the next find to replace with black
With Application.ReplaceFormat.Font
.ColorIndex = 1
End With
'Do the actual replacing
For Each aSheet In ActiveWorkbook.Worksheets
aSheet.Activate
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
Next aSheet
Это выполняется для всех ячеек на всех листах для всей рабочей книги. Вы также можете сделать это, перейдя в обычное окно поиска и замены, а затем нажав кнопку Параметры.
Комментарии:
1. 1. Хорошее решение. Я не часто играю с Excel и vba. Не могли бы вы рассказать мне, как нанести его на все листы? Я пробовал это, но это работает только на активном листе.
2. В моем тестировании это работает на всех листах. Я немного озадачен, почему это не в каждой ситуации. Я проверю и посмотрю, смогу ли я это выяснить.
3. Спасибо за ваш интерес. 🙂 Я использую Excel 2002. Возможно, это поведение меняется между разными версиями.
4. Попробуйте мою исправленную версию в основном сообщении. Похоже, вам все равно может потребоваться выполнить цикл по каждому листу в рабочей книге.
5. Большое вам спасибо. Теперь это работает как по волшебству. Я узнал кое-что новое. 🙂
Ответ №2:
Sub change_color()
For Each sht In ActiveWorkbook.Sheets
Set rng = sht.UsedRange
For Each cell In rng
If cell.Font.ColorIndex = 3 Then
cell.Font.ColorIndex = 0
End If
Next cell
Next sht
End Sub