向已筛选区域写入数组的异常问题咨询及解决方案求助
向已筛选区域写入数组的异常问题咨询及解决方案求助
大家好,我最近在Excel VBA里遇到个头疼的问题,想请教下各位前辈。
我平时习惯直接把数组赋值给单元格区域,比如用 rngRangeObject = varArray 这种方式,就能把数组内容写入对应的列中,操作简单又高效。但如果目标列开启了筛选器,结果就变得完全出乎意料了。
我做了个测试:
- 在没有筛选的工作表上运行示例代码,一切正常,数组内容会按顺序填满A1:A18;
- 但如果给A列添加筛选,把A4、A7、A10、A13、A16这些行隐藏后,写入结果就乱了:
- 被筛选隐藏的单元格完全没被修改;
- 可见区域的填充逻辑也不对,比如A5:A6这个连续可见区域里的两个单元格都被填成了"1",而A14:A15区域却填成了1和2,完全不是我预期的按数组顺序填充。
我一开始猜测是筛选后区域被拆分成多个Area,导致Excel每次都从数组开头重新写入,但实际测试下来好像不是这个原因。另外还有个有趣的点:如果是手动隐藏这些行而不是用筛选器,就不会出现这个问题。
有没有大佬能解释下这个现象的原因?同时能不能给个不用移除筛选器,就能把数组完整写入整个列(包括被筛选隐藏的单元格)的高效方法?
以下是我用的示例代码:
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
备注:内容来源于stack exchange,提问作者Greengruenvert
相关产品推荐
相关产品推荐

