我有一个工作表,其中包含从单元格开始的自动过滤范围B3
。柱子A
包含一些宏按钮,但实际上是空白的。前两行包含有关主范围中的数据的信息。
在 VBA 中,我使用我认为是确定工作表中最后一行的标准方法(在这种情况下,我不能依赖.End
单列方法):
LastRow = Activesheet.Cells.Find("*",SearchOrder:=xlByRows,SearchDirection:=xlPrevious).Row
但是,有时,即使我有数千行数据,它也会返回值 1。似乎只有在设置了过滤器时才会执行此操作(但仍然存在包含数据的可见行),但即使如此,它也不会总是发生,而且我看不到它的模式。
我知道还有其他解决方案 - 我已更改为UsedRange
技术,但令人非常沮丧的是,这个特定的技术失败了,因为否则在这种情况下它可能是最有效的技术。
有谁知道为什么会发生这种情况?
您是否想过使用格雷格的答案,但循环查找所有列的最高行?就像是:
LastRow = 1
With ActiveSheet
For i = 1 to .UsedRange.Columns.Count
If .Cells(.Rows.Count, i).End(xlUp).Row > LastRow Then
LastRow = .Cells(.Rows.Count, i).End(xlUp).Row
EndIf
Next i
End With
该解决方案允许在底行中随机填充空白值。 usedRange 很棘手,因为它将返回曾经编辑过的最远的外围行/列(即使当前为空白)。根据我的经验,如果您在工作表中按 Ctrl-Up,Range.End(xlUp) 的行为与您所期望的一样。这更容易预测一些。
如果您决定使用 .Find ,请尝试查看 After:=[A1] 参数。我还没有探索这个函数的特性,但是考虑到这个问题,这将是我开始的地方。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)