使用范围填充数组

时间:2015-04-11 21:11:18

标签: arrays excel vba

如果我运行sub并且注释掉的行处于活动状态,则会出现运行时错误1004。 它运行正常,但我需要增加数组以在另一个循环中读取更多数据。我更喜欢使用Range(单元格选项。

Option Explicit

Dim myarray As Variant

'There are 6 numbers stored in a1 to a6 on sheet1

Sub read_as_entire_()
    'This line fails if I use Cells...
    'myarray = Worksheets("Sheet2").Range(Cells(1, 1), Cells(6, 1)).Value

    'This line works fine
     myarray = Worksheets("Sheet2").Range("a1:a6").Value

    Sheet2.Range("b1:b6") = myarray

    'Sheet2.Range(Cells(1, 2), Cells(6, 2)) = myarray

End Sub

有什么区别?

2 个答案:

答案 0 :(得分:2)

“单元格”是指活动工作表的一个范围(不是“Sheet2”或它可以工作),工作表(“Sheet2”)。范围只接受“Sheet2”工作表的范围,所以它引发错误。你可以解决这个问题:

myarray = Worksheets("Sheet2").Range(Worksheets("Sheet2").Cells(1, 1), Worksheets("Sheet2").Cells(6, 1)).Value

或更短

with Worksheets("Sheet2")
    myarray = .Range(.Cells(1, 1), .Cells(6, 1)).Value
end with

我更喜欢使用

myarray = Worksheets("Sheet2").Cells(1, 1).Resize(6,1)

答案 1 :(得分:1)

我怀疑当您在注释掉的部分中引用单元格时,引用Sheet2。它可能是指活动表格。

要测试此操作,请尝试将该行修改为以下内容:

With Worksheets("Sheet2")
    myarray = .Range(.Cells(1, 1), .Cells(6, 1)).Value
End With

我正在使用with构造,这意味着当我在该公式中使用点('。')时,它指的是在最近的with语句块的开头引用的对象。