【发布时间】:2017-02-11 09:15:34
【问题描述】:
我在使用 VBA 进行自动过滤时遇到了一个奇怪的问题。顶行 (O1) 中的单元格包含对用户定义函数的引用,以检查另一个单元格 (F2) 的颜色。如果我 手动 自动过滤以隐藏引用的单元格 F2,则该函数可以正常工作。如果我有一个执行 EXACT SAME FILTER 的 VBA 脚本(我使用 Macro Record 来确保),它会返回一个 #VALUE!错误。在调试模式下单步执行代码,它会点击 Interior.ColorIndex 行 - 并静默退出函数(返回 #VALUE!),而不会点击下一个 Stop 或生成 VBA 错误。
单元格 O1 包含:
=stupidFunction()
VBA 代码:
Function stupidFunction()
Application.Volatile True
Calculate
Stop
stupidFunction = Range("F2").Interior.ColorIndex
Stop 'VBA autofilter never gets here, manual autofilter does!
End Function
Sub TestFilter()
'
' TestFilter Macro
'
'
ActiveSheet.Range("$A$1:$F$82").AutoFilter Field:=6, Criteria1:= _
"=*Approval*", Operator:=xlAnd
End Sub
知道发生了什么吗?
【问题讨论】:
-
你有模块中的功能码还是表单码?
-
AFAIK 您无法访问 UDF 中的其他单元格。
-
函数在一个模块中。只要我不使用 VBA 启动的自动过滤器,函数就完美地工作。虽然您无法更改 UDF 中的任何单元格(内容、格式、颜色等),但您可以查看其他单元格的属性。
-
对不起,我完全误读了这个问题。
-
我可以确认相同的行为,但在应用 VBA 过滤后立即添加
ActiveSheet.Calculate可以修复它(手动重新触发公式也是如此)