我试图有条件地格式化那些值不依赖于其他任何东西的单元格,所以我认为应用于ISFORMULA
每个单元格都可以解决问题,但后来意识到如果一个单元格有类似的东西=10^23
,那么它也将是一个公式,即使它的值是恒定的。
带有公式的单元格=10+5
会使我所查找的函数返回 FALSE,而带有公式的单元格=A5+3
会使我所查找的函数返回 TRUE。
答案1
这是一个在大多数情况下都可以工作的 UDF:
Function HAS_REF(r As Range) As Boolean
HAS_REF = (r.Formula <> r.FormulaR1C1)
End Function
Formula
除非范围包含单元格引用,否则范围的和属性FormulaR1C1
恰好相同。
例外:如果单元格包含对命名范围的引用,则两者将相等并且您的单元格将不会突出显示。
更新:
这是一个也检查范围名称的版本:
Function HAS_REF(r As Range) As Boolean
Dim i As Long
HAS_REF = (r.Formula <> r.FormulaR1C1)
If HAS_REF Then Exit Function
For i = 1 To ThisWorkbook.Names.Count
If InStr(r.Formula, ThisWorkbook.Names(i).Name) Then
HAS_REF = True
Exit Function
End If
Next i
End Function
当然,如果您在工作簿中不使用范围名称,那么我之前发布的函数就足够了。
关于Precedents
属性:
我尝试使用Precedents
范围的属性来检查引用。但似乎不起作用。我尝试了以下方法:
直接
r.Precedents
在 UDF 中使用来检查范围是否有任何先例。将其分配给范围变量只是分配了r
(而不是r.Precedents
)。使用辅助子程序通过从函数调用子程序来进行实际检查。这也不起作用。但是,当您注释掉函数中调用子程序的行时,子程序可以正常工作并正确检查先例。
尝试使用 UDF 和辅助子程序都可以访问的全局变量。没什么区别。