将数组写入已筛选的范围

Write Array to Range that is filtered

提问人:Greengruenvert 提问时间:10/20/2023 最后编辑:Ken WhiteGreengruenvert 更新时间:10/20/2023 访问量:80

问:

我有一个数组,我想把它写到工作表的一列中。 通常我只是这样做
rngRangeObject = varArray

但是,如果列上有一个活动的过滤器,则结果是......意外。

如果您在没有过滤器的工作表上运行下面的示例代码,则它可以正常工作。 如果为第 1 列添加筛选器,以便隐藏单元格 A4、A7、A10、A13、A16 中的值,则会在(可见)单元格中获得以下结果。过滤后的细胞保持不变:

筛选列上的屏幕截图结果

enter image description here

我的第一个想法是它链接了不同的区域,并且由于某种原因,Excel 总是会在每个区域重新开始,但事实并非如此。A5:A6 是一个区域,两个单元格都填充有“1”。 A14:A15 是一个区域,它充满了 1 和 2。

有人有解释和快速方法在不删除过滤器的情况下将数组写入过滤的列(包括过滤的单元格)吗?

有趣的事实:如果您在不使用过滤器的情况下隐藏这些行,则没有问题。

示例代码如下:

Sub WriteArrayToRange()
    Dim varArr(1 To 18, 1 To 1) As Variant
    Dim i As Integer
    Dim objRng As Range
    
    For i = 1 To 18
        varArr(i, 1) = i
    Next
    
    Set objRng = Range("A1:A18")
    
    objRng = varArr
    
End Sub

数组 Excel VBA 筛选器 范围

评论

1赞 Tim Williams 10/20/2023
以前: stackoverflow.com/questions/50365995/... (虽然这指的是 Table/Listobject,并且建议的解决方法在这里不起作用,但观察到的行为是相同的......
1赞 Tim Williams 10/20/2023
对于常规过滤范围:stackoverflow.com/questions/10159073/...
0赞 Spectral Instance 10/20/2023
由于您的上下文不是 CustomView,因此对使用 CustomView 没有限制 - 您可以在过滤器处于活动状态时创建一个,停用过滤器以复制数据,然后使用简单的方法调用重新激活过滤器(通过之前创建的“CustomView”)ListObject
0赞 Greengruenvert 10/23/2023
谢谢@[Tim Williams]和@Spectral实例,我将尝试一下CustomView。

答: 暂无答案