【问题标题】:Find the next visible row查找下一个可见行
【发布时间】: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

标签: excel vba


【解决方案1】:

以下内容应该可以满足您的需求。

Public Function NextVisibleCell(Range As Range) As Range
Application.Volatile
Dim i As Long
Set Range = Range.Cells(Range.Rows.Count, Range.Columns.Count)
For i = 1 To Rows.Count - Range.Row
    If Not Range.Offset(i).EntireRow.Hidden Then
        Set NextVisibleCell = Range.Offset(i)
        Exit Function
    End If
Next i
End Function

【讨论】:

  • + 1 这确实获得了下一个可见行的值。
  • 这是 OP 想要处理的一个非常重要的点 want to compare text between non-contiguous (due to filtering) rows, but I don't know how to provide the formula with a reference to the next visible row.
  • 可以返回对 UDF 范围内的引用...Function Nxt(r As Range) As Range: Set Nxt = r.Offset(1, 0): End Function 如果您将返回值从这里输入(例如)OFFSET(),它似乎工作得很好。
  • @TimWilliams: True 然后 OP 可以使用您的THIS 代码来比较行?
  • @TimWilliams 你是对的,不知道为什么我认为你不能,更新答案以反映。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多