如果将变量设置为工作表范围,则会得到一个二维数组。尝试这个
Sub MoveArray()
Dim myArray
myArray = Range("A1:B3").Value
Range("A6:B8").Value = myArray
End Sub
或这个
Sub MoveArray2()
Dim myArray
Dim myArray2
Dim myRange
Dim i As Integer
Dim j As Integer
myArray = Range("A1:B3").Value
Set myRange = Range("A6:B8")
For i = 1 To myRange.Rows.Count
For j = 1 To myRange.Columns.Count
myRange.Cells(i, j) = myArray(i, j)
Next j
Next i
myArray2 = myRange
End Sub
在任何一种情况下,变体都会变成一个数组而不是一个范围对象,并且循环从数组中设置范围的值。
编辑
正如您从该线程的问题/答案中的评论中看到的那样,范围不是数组,它是一个具有许多属性和方法的复杂对象。属性之一(我认为默认属性)是值。此属性实际上是范围内单元格值的二维数组(或至少表现得像一个)。因此,如果 myArray 也是 2 维数组,则代码myRange = myArray
将执行。将发生的情况是将范围引用的单元格的值设置为数组中的值。范围指的是这些单元格,但改变的是单元格中的值而不是范围对象。
因此,如果您将范围转移到不同的单元格集,则新的单元格集将保留其值。
实际上,如果要更改范围引用的单元格的值,可以按如下所示进行:
Sub Test1()
Dim myArray(1 To 4, 1 To 1)
Dim myRange As Range
myArray(1, 1) = 1
myArray(2, 1) = 2
myArray(3, 1) = 3
myArray(4, 1) = 4
Set myRange = Range("A1:A4")
myRange = myArray
End Sub