我正在尝试使用Bob Phillips创建的VBA函数来检查特定单元格中是否满足条件格式。这似乎是一个受人尊敬的解决方案,因为Google提出了许多不同的引用,但它为我抛出了Type错误。我正在使用Excel 2007,并且对代码的最后一次更新是在2005年,所以我认为其中涉及一些兼容性问题。我已经修复了一个语法错误(Set rng = rng(1, 1)
直到插入.Cells
才起作用),但由于无法解析代码的作用,因此无法修复该错误。
该函数经过专门设计,可根据公式(即我的姓名)来评估条件。这是完整的代码:
Public Function IsCFMet2(rng As Range) As Boolean
Dim oFC As FormatCondition
Dim sF1 As String
Dim iRow As Long
Dim iColumn As Long
Set rng = rng.Cells(1, 1)
If rng.FormatConditions.Count > 0 Then
For Each oFC In rng.FormatConditions
If oFC.Type = xlExpression Then
're-adjust the formula back to the formula that applies
'to the cell as relative formulae adjust to the activecell
With Application
iRow = rng.Row
iColumn = rng.Column
sF1 = .Substitute(oFC.Formula1, "ROW()", iRow)
sF1 = .Substitute(sF1, "COLUMN()", iColumn)
sF1 = .ConvertFormula(sF1, xlA1, xlR1C1)
sF1 = .ConvertFormula(sF1, xlR1C1, xlA1, , rng)
End With
**** IsCFMet2 = rng.Parent.Evaluate(sF1)
End If
If IsCFMet2 Then Exit Function
Next oFC
End If
End Function
加星号的行将引发类型错误。我不完全了解With Application块,也不知道它对检测满足的条件格式规则的作用,因此我不知道问题是什么或如何在不破坏代码的情况下解决问题。
这是我用来检查功能的测试宏:
Sub Test():
Dim Tester As Range
Set Tester = ActiveCell
If IsCFMet2(Tester) Then MsgBox "CF is met!"
End Sub
但是我在各种范围输入中都遇到了相同的错误,因此我非常有信心输入本身不是问题-我将其包括在内只是为了预防。