从不同工作簿的命名区域导入值

时间:2016-02-16 08:20:51

标签: excel vba excel-2010 named-ranges

我有以下代码,旨在将范围从不同的工作簿导入到当前的工作簿中。它们共享相同的命名范围名称,但可能是它们位于不同的工作表中。

我的sub代码如下所示:

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))

这不起作用所以我需要找到另一种有效的方法。 有解决方案的人吗?我正在考虑在相应的工作簿中循环使用命名范围,但这似乎是一种效率低下的解决方案。

1 个答案:

答案 0 :(得分:0)

如果你已经在使用Excel 2016,那么你就不需要VBA了 - 只需通过以下代码获取数据:

let
    Source = Excel.Workbook(File.Contents("SourcepathOfYourFile"), null, true),
    #"Filtered Rows" = Table.SelectRows(Source, each ([Kind] = "DefinedName") and ([Item] = "DefinedName1" and [Item] = "DefinedName2"and [Item] = "DefinedName3")),
    #"Expanded Data" = Table.ExpandTableColumn(#"Filtered Rows", "Data", {"Column1"}, {"Column1"})
in
    #"Expanded Data"

如果您的命名范围包含多于1列,则必须在最后一步中选择它们。这些操作也可以通过UI轻松完成。

对于早期的Excel版本,您需要安装Power Query-AddIn:https://www.microsoft.com/en-us/download/details.aspx?id=39379&CorrelationId=8191753b-a127-467e-a962-7823aecec9ec

如果需要,也很容易从多个文件中收集命名范围。