Эта процедура работает посредством обработки ошибок
Mid(rng.Formula, 2, Len(rng.Formula) - 1)
Эта часть извлекает адрес из формулы в ячейке, например, если у вас была формула =Sheet1!$A$1
, она получит Sheet1!$A$1
, который является адресом диапазона.
Set rErr = Range(Mid(rng.Formula, 2, Len(rng.Formula) - 1))
Здесь мы устанавливаем диапазон с полученным адресом.Обычно, если адрес недействителен, VBA Editor выдаст ошибку, но с On Error Resume Next , которая может быть использована для отключения процедуры обработки ошибок, мы намеренно игнорируем эту ошибку, и процедура не останавливается.
Err Object содержит информацию об ошибках во время выполнения.Свойство по умолчанию Err
- .Number
, которое указывает ошибку времени выполнения.Если ошибки не произошло (в данном случае адрес был действительным) Err.Number = 0
или Err = 0
, в противном случае он больше нуля.
CBool(Err)
CBool - функция преобразования типа.Он преобразует 0 в ЛОЖЬ и любое другое число в ИСТИНА.Если произошла ошибка, ее число будет больше 0 => CBool(Err) = True
r
в rErr
, скорее всего, означает Range
, но это всего лишь предположение.
Вы можете попробовать что-то вроде этого, хотя это все еще неуклюже:
Sub mcrFinancial_Color_Codes()
Dim LoopCell As Range
Dim Checker As Range
For Each LoopCell In Intersect(ActiveSheet.UsedRange, Selection)
With LoopCell
Select Case True
Case .HasFormula
On Error Resume Next
Set Checker = Range(Mid(rng.Formula, 2, Len(rng.Formula) - 1))
On Error GoTo 0
If Checker Is Nothing Then
.Font.ColorIndex = 1
Else
.Font.ColorIndex = 10
End If
Case .Value <> 0
.Font.ColorIndex = 5
Case Else
.Font.ColorIndex = xlAutomatic
End Select
End With
Next LoopCell
End Sub