【问题标题】:Import values from named ranges from different workbooks从不同工作簿的命名范围导入值
【发布时间】: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


【解决方案1】:

如果您已经在使用 Excel 2016,则不需要 VBA 来执行此操作 - 只需使用以下代码通过 Get Data 进行本机操作:

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

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

【讨论】:

  • 忘记添加我正在使用的标签 2010,我们只是在几个月后更新。
  • 那么您需要从上面的链接安装 Power Query-Add in。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多