如果我运行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
有什么区别?
答案 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语句块的开头引用的对象。