【发布时间】:2014-02-06 03:54:14
【问题描述】:
我正在尝试编写一个函数来返回自动过滤列表中的下一个可见行。
在具有自动过滤范围的工作表中,以下代码返回 #VALUE 错误:
Function FindNextVisible(S As Range) As Range
Dim L As Range
Dim R As Range
Dim counter As Integer
counter = 1
Set L = Range(S, S.End(xlDown)).Cells.SpecialCells(xlCellTypeVisible)
For Each R In L
counter = counter + 1
If counter = 2 Then FindNextVisible = R
Next
End Function
我怀疑是初学者的错误...
更新 1: 好的,很好的建议。我不能使用 SpecialCells。不幸的是,我的 VBA 并不强大,而且我在使用 Sub 版本时遇到了问题。
也许还有其他方法。我想比较非连续(由于过滤)行之间的文本,但我不知道如何为公式提供对下一个可见行的引用。
【问题讨论】:
-
你不能在函数内部使用 SpecialCells,并得到预期的结果。
-
特别是从工作表公式调用的函数:例如,如果从另一个 Sub 调用它则可以。
-
@TimWilliams:您可以在 UDF 中使用
SpecialCells。 -
@SiddharthRout - 我的错。我想我记得 SpecialCells 的一些问题
-
@TimWilliams:是的,特殊单元存在问题。我只是指出使用它们不会给您带来错误,尤其是
#Value错误。它只会给你意想不到的结果。 OP 得到#Value错误的原因是因为他在不使用SET的情况下将值分配给范围对象,而不是因为SpecialCells