我需要根据该单元格中的内容为单元格着色。
Sub mcrFinancial_Color_Codes()
Dim rng As Range
Dim rErr As Range
On Error Resume Next
For Each rng In Intersect(ActiveSheet.UsedRange, Selection)
If rng.HasFormula Then
Set rErr = Range(Mid(rng.Formula, 2, Len(rng.Formula) - 1)) 'Somehow sees if formula references another sheet???
If CBool(Err) Then
rng.Font.ColorIndex = 1 'black
Else
rng.Font.ColorIndex = 10 'green
End If
Err = 0
ElseIf CBool(rng.Value) Then
rng.Font.ColorIndex = 5 'blue
Else
rng.Font.ColorIndex = xlAutomatic 'default
End If
Next rng
Set rErr = Nothing
End Sub
我找到了这段代码,但在If rng.HasFormula
1)Set rErr
的作用是什么,它如何通过包含感叹号(!)的单元格引用来区分公式。
2)rErr
是一个变量,但除Err
外没有实际引用。 r代表什么吗?
3)If CBool(Err)
。对于Err,这将以某种方式返回true,并将其标记为黑色,否则将其标记为绿色。它是如何从Err获取布尔值的?
答案 0 :(得分:1)
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编辑器将引发错误,但是使用On Error Resume Next(可用于禁用错误处理例程),我们有意忽略此错误,并且过程不会停止。
Err Object包含有关运行时错误的信息。 Err
的默认属性是.Number
,它指定运行时错误。如果没有发生错误(在这种情况下,地址是有效的)Err.Number = 0
或Err = 0
,否则它大于零。
CBool(Err)
CBool是类型转换功能。它将0转换为FALSE,并将其他任何数字转换为TRUE。如果发生错误,则该数字将大于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