我在 Excel 2013 中工作,在 VBA 中编写一个宏,并且我试图为列表对象(表)的列中的所有单元格分配一个值,包括一些可能被过滤器隐藏的单元格。为每个单元格单独分配一个值似乎大大减慢了这个过程,我发现一个建议将范围复制到一个变体数组中,遍历数组以更改值,然后将数组复制回范围。
varray = table.DataBodyRange.Columns(columnIndex).Value
For i = 1 to UBound(varray, 1)
If (condition) then
varray(i, 1) = i
End If
Next i
table.DataBodyRange.Columns(columnIndex).Value = varray
在大多数情况下,这有效并解决了速度问题。当表中的任何列上有过滤器时,它就会停止工作。据我所知,数组仍会正确地从表中复制,但不会正确复制回来。过滤器隐藏的第一个单元格之前的所有单元格将被正确处理,但隐藏的单元格不会更改,隐藏单元格之后的任何单元格都将设置为数组中的第一个值。
这仅在单元格被过滤器隐藏时发生,而不是在工作表的行被隐藏时发生。
有谁知道为什么会这样?尽管有过滤器,有没有办法正确重新应用数组?如果没有,有没有办法暂时移除过滤器,进行更改,然后将相同的过滤器放回原位?或者只是一种不牺牲速度的更好方法?
任何帮助,将不胜感激。谢谢!