【发布时间】:2016-02-16 08:20:50
【问题描述】:
我有以下代码,旨在将不同工作簿中的范围导入当前工作簿。它们共享相同的命名范围名称,但它们可能位于不同的工作表中。
我的子代码如下所示:
Sub ImportWorkbookRanges()
Dim ws As Workbook, wbI As Workbook
Dim arrRanges As Variant, i As Integer
Set wb = ThisWorkbook
[...]Workbook File to Import[...]
Set wbI = ActiveWorkbook
wb.Activate
arrRanges = Array("NamedRange1", "NamedRange2", "NamedRange3")
For i = LBound(arrRanges) To UBound(arrRanges)
[...]Here code to import the values[...]
Next i
wbI.Close False
End Sub
现在导入代码理想情况下如下所示:
wb.Range(arrRanges(i)) = wbI.Range(arrRanges(i))
这行不通,所以我需要找到另一种可行的方法。 有人有解决方案吗?我正在考虑遍历相应工作簿中的命名范围,但这似乎是一个低效的解决方案。
【问题讨论】:
-
你知道工作簿的名字吗?如果没有,它们是否开放,以便您可以在不知道名称的情况下对其进行迭代?
-
我将能够遍历导入工作簿中的名称,即
wbI是我们要从中导入值的已打开工作簿的名称。我将能够浏览那里的所有名称并做出相应的选择。我不确定这是否是最有效的方法。 -
不会有这样的工作吗?
For Each book in Workbooks For i = LBound(arrRanges) To UBound(arrRanges) wb.Range(arrRanges(i)) = book.Range(arrRanges(i)) Next i Next book -
不,该范围需要一个工作表才能使用。
-
当然,我的错。那么不同工作表中不同工作簿中的命名范围,还是包含它们的工作表在所有工作簿中都具有相同的名称?如果是这样,对工作表名称的静态引用应该可以工作。另一个想法可能是使用工作簿名称/路径和工作表名称创建数组,然后遍历这两个数组。
标签: excel vba excel-2010 named-ranges