错误13已过滤的Excel工作表

时间:2017-10-21 15:11:07

标签: arrays excel vba filter

我有一个已过滤的工作表,其中我需要column N中的值。 此工作表在第1行中也有标签。一切都很完美,除非我在过滤器后面只剩下一行。在那一刻,我得到Error 13。 我看到程序使用的值是来自cel A1的值,这是标签中的textvalue而不是column N中的值。谁能告诉我我做错了什么?

Dim Rng As Range
        Set Rng = Range("N2", Range("N2").End(xlDown)).Cells.SpecialCells(xlCellTypeVisible)

        For Each cell In Rng.SpecialCells(xlCellTypeVisible)
            score(y) = cell
            totaal_k = totaal_k + score(y)
            y = y + 1
        Next cell

2 个答案:

答案 0 :(得分:0)

这是发生在每个过滤后的行还是仅行641?

我认为xlDown就是问题所在。无论如何,你有没有预定义最后一行范围,还是它必须是动态的?如果有,那么我认为它可能是解决方案。如果不是,我会尝试以不同方式定义数据范围,例如通过实现快速功能来确定最后一行数据。可在此链接下找到示例:https://www.extendoffice.com/documents/excel/1721-excel-find-last-row-column-with-data.html

另外,作为故障排除的一部分,我建议在上面摘录的第4行放置一个断点,看看对单元格和Rng应用了哪些值。

现在我提到了它 - 我刚刚想到你使用xlCellTypeVisible两次 - 在你的Rng和后来引用那个Rng。如果您在设置变量时应用它,为什么以后再使用它?尝试从其中一个地方删除该部分,看看它是如何工作的。

答案 1 :(得分:0)

在与其方法/属性进行交互之前,请尝试检查Rng是否已实际设置。

Dim Rng As Range
Set Rng = Range("N2", Range("N2").End(xlDown))
    If Not (Rng is nothing) then
    For Each cell In Rng.SpecialCells(xlCellTypeVisible) 
    score(y) = cell 
    totaal_k = totaal_k + score(y) 
    y = y + 1 
    Next cell
    End if