Vba 在基于UsedRange.Rows进行筛选时,将代码调整为不出错

Vba 在基于UsedRange.Rows进行筛选时,将代码调整为不出错,vba,excel,Vba,Excel,我有一段代码,根据两个不同的范围过滤工作表(snowCsatDetails)。过滤后,工作表的页眉后面可以有0行,也可以有1到多行。过滤后,第二段代码计数到最后一行,然后将这些行(如果存在)复制到新工作表(snowCsatSummary) 到目前为止,代码运行良好,因为在过滤第一个工作表之后,数据始终存在。然而,今天,当过滤时,不存在行。代码现在在“filledRows”行中出错。这似乎是因为没有可复制的内容 因此,我尝试将错误处理添加到此行(On error Resume Next在其上方和O

我有一段代码,根据两个不同的范围过滤工作表(snowCsatDetails)。过滤后,工作表的页眉后面可以有0行,也可以有1到多行。过滤后,第二段代码计数到最后一行,然后将这些行(如果存在)复制到新工作表(snowCsatSummary)

到目前为止,代码运行良好,因为在过滤第一个工作表之后,数据始终存在。然而,今天,当过滤时,不存在行。代码现在在“filledRows”行中出错。这似乎是因为没有可复制的内容

因此,我尝试将错误处理添加到此行(
On error Resume Next
在其上方和
On error GoTo 0
在其下方),但这会导致代码完全忽略筛选的行,并将每一行数据复制到新工作表中


我不确定是我遗漏了一些简单的东西,还是更复杂的东西。感谢您的帮助。

UsedRange
被认为不可靠,最好使用
Find
。例如,见

但是,如果您有一个简单的设置,并且知道
UsedRange
可能存在的问题,并且希望继续使用当前代码,则可以检查
UsedRange.Rows.Count
是否大于1。即使工作表中没有内容,也至少为1

filteredLastRow = ActiveSheet.UsedRange.Rows.Count

If filteredLastRow > 1 Then
    ' there is some data to process..
End If

这个数字不会是0这一事实不应该引起关注,因为看起来您仍然有一个持久的标题行。

哦,好的。我原以为零行(在标题之后)意味着它将是0最小值,而不是1。我将不得不研究
查找
,因为我不知道如果它实际上不是0,为什么会出现这种情况。
A2:A1
的范围将是颠倒的。
filteredLastRow = ActiveSheet.UsedRange.Rows.Count

If filteredLastRow > 1 Then
    ' there is some data to process..
End If