在不同的工作表中激活范围

时间:2014-08-04 20:07:03

标签: excel vba syntax range worksheet

我想知道是否有替代以下代码:

Dim Arr() as Variant
Arr = Range("A1:I511")

指的是指定的工作表。我尝试了以下

Dim Arr() as Variant
Arr = Range(Sheets("list").Cells(1, 1), Sheets("list").Cells(511, 9))

还有其他方法可以写这个吗?我想要这样的东西:

Dim Arr() as Variant
Arr = worksheets("list").range(Cells(1, 1),Cells(511, 9))

1 个答案:

答案 0 :(得分:1)

还有很多其他方法可以写这个,也许最简单:

arr = Sheets("list").Range("A1:I511").Value

但是这是你尝试的问题:

Cells(_row_, _column_)返回一个范围对象,该对象的计算结果为默认属性(.Value属性。所以当你这样做时:

Range(Sheets("list").Cells(1, 1), Sheets("list").Cells(511,9))

你实际上是这样做的,这会引发错误,除非这些单元格包含一个字符串值的可能性不大的情况,该字符串值可以被解释为范围地址,如“$ A $ 1”或“$ J $ 5:$ Q $ 459“,等等。

Range(Sheets("list").Cells(1, 1).Value, _ Sheets("list").Cells(511,9).Value)

请改为尝试:

Range(Sheets("list").Cells(1, 1).Address, _ Sheets("list").Cells(511,9).Address).Value

或者:

With Sheets("list")
   arr = Range(.Cells(1, 1).Address .Cells(511,9).Address).Value
End With

NB 如果没有激活该表单,则无法在其他工作表上激活范围。我建议你不要两者兼顾。有99%的时间没有理由在VBA中“激活”任何东西。有关详细说明,请参阅此处:

How to avoid using Select in Excel VBA macros