Excel VBA从命名区域填充数组

6

我需要用另一个工作簿中命名范围的单元格填充数组的值。 到目前为止,我尝试过的方式并没有成功:

Dim vArray() as Variant
vArray = Workbooks("Book2").Worksheets("Sheet1").Range("myRange")

Debug.Print vArray(1) 'yields error

同样无法成功的是:

vArray = Workbooks("Book2").Names("myRange")

或者

vArray = Workbooks("Book2").Names("myRange").RefersToRange

你的第一次尝试是正确填写它,但你读错了。 - user2140261
2个回答

7
尝试将打印行更改为以下内容:
Debug.Print vArray(1, 1)

以下是如何循环遍历它们的方法:

Sub Test()
  Dim vArray() As Variant
  vArray = Range("myRange")

  Dim i As Long
  For i = LBound(vArray, 1) To UBound(vArray, 1)
    Debug.Print vArray(i, 1)
  Next
End Sub

*编辑*

如果您想在不激活'Book2'的情况下使用它,可以这样做:

Sub Test()
  Dim vArray() As Variant
  Dim rng As Range
  Dim wbk As Workbook

  Set wbk = Excel.Application.Workbooks("Book2.xls")
  Set rng = wbk.Worksheets("Sheet1").Range("myRange")
  vArray = rng

  Dim i As Long
  For i = LBound(vArray, 1) To UBound(vArray, 1)
     Debug.Print vArray(i, 1)
  Next
 End Sub

从另一本书打开book2,请将第5行更改为以下内容:
Set wbk = Excel.Application.Workbooks.Open("C:\Users\myname\Desktop\Book2.xls")

甚至没有考虑数组有两个维度。只要我先激活Workbooks("Book2").Worksheets("Sheet1"),这种方法就有效。我无法通过指向Workbooks("Book2").Worksheets("Sheet1").Range("myRange")来创建数组。 - user2137354
1
@nethy - 请看我上面的编辑,我添加了几种引用Book2的方法,而不必激活它。同样,您也可以在文件未打开的情况下获取来自Book2的范围。 - Automate This

4

还有一种方法...已经测试过了

Sub Test()
Dim vArray As Range
Dim rng As Range

  With ActiveSheet
  Set vArray = .Range("myRange")
  For Each rng In vArray
  Debug.Print rng.Value
  Next rng
  End With

End Sub

1
这个方法很棒,因为我可以直接指向另一个工作簿而不必先激活它。 - user2137354

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接