我有以下代码,旨在将范围从不同的工作簿导入到当前的工作簿中。它们共享相同的命名范围名称,但可能是它们位于不同的工作表中。
我的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))
这不起作用所以我需要找到另一种有效的方法。 有解决方案的人吗?我正在考虑在相应的工作簿中循环使用命名范围,但这似乎是一种效率低下的解决方案。
答案 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
如果需要,也很容易从多个文件中收集命名范围。