【发布时间】:2012-04-26 21:28:00
【问题描述】:
将过滤范围的值复制到数组似乎没有问题:然后数组包含来自过滤和未过滤单元格的值。但是,当我将数组的内容复制回过滤范围时,结果对我来说是不可理解的。
这是我的代码:
Sub test()
Dim rangecopy() As Variant
rangecopy() = Range(Cells(2, 1), Cells(14, 3)).Value
For c = LBound(rangecopy, 1) To UBound(rangecopy, 1)
rangecopy(c, 1) = c
rangecopy(c, 2) = c * 10
rangecopy(c, 3) = c * 100
Next
Range(Cells(2, 1), Cells(14, 3)).Value = rangecopy()
End Sub
它应该给出以下结果。此处,宏将数组复制到该范围时,该范围未过滤。
如果范围被D列过滤(“NO”被过滤掉),结果如下:
首先,过滤后的单元格不会更新。然后,B 列中的大多数单元格从数组的第一列 (4, 5, 6) 中获取值,而其他一些单元格从数组的第二列 (10) 中正确获取值。最后两行填充了#N/A 错误。这应该这样工作吗?我正在使用 Office 2010。
【问题讨论】:
-
仅供参考,我得到了相同的结果。还不知道为什么。
-
您使用的是什么版本的 Excel?
-
我在 Excel 2003 中使用相同的代码得到相同的结果。如果我用
Set RngUnion = Application.Union(Range("A2:C2"), Range("A4:C6"), Range("A8:C8"), Range("A10:C14"))RngUnion = rangecopy替换最后一条语句,我也会得到相同的结果。所以原因不是 AutoFilter 而是 Union。 -
使用
Set RngUnion = Application.Union(Range("A2:C2"), Range("A3:C6"), Range("A7:C8"), Range("A9:C14"))(也就是说,联合中没有间隙),我得到了正确的结果。使用Set RngUnion = Application.Union(Range("A2:C2"), Range("A4:C6"), Range("A8:C8"), Range("A10:C14"), Range("A16:C18"))(即联合组成与数组大小相同),前四个子范围与以前一样,但最后一个子范围设置为数组的前三行。跨度>
标签: excel excel-2010 vba