Excel 已关闭工作簿的单元格引用使用单元格中的文件名

Excel cell reference from closed workbook using file name in cell

我有一个包含 96 个 xls 文件的中央位置;这 96 个文件中的每一个都代表位于此处的单独测试:

"\server5\Operations\MainBoard 测试中心位置请勿删除或重命名"

我创建了一个 Excel 工作簿,将每个单独测试的所有信息输入到单个 sheet 中。然后,我使用 VBA 提取文件名,并在同一工作簿的第二个 sheet 上向文件添加 link。我 link 将这些文件编辑为 sheet 1.

接下来,我在顶行添加了与执行的测试对应的所有信息,每个工作簿(测试)细分为一行。

现在我需要在新工作簿上填充 sheet 1(高级主板测试 log.xlsx)

到目前为止,此公式有效,但仅适用于打开的工作簿:

=INDIRECT("'\server5\Operations\MainBoard testing central location DO NOT REMOVE or RENAME\["&A7&"]Summary'!$E9")

其中A7代表文件名列,范围从A6到A103

摘要E9是我想在单元格C7中输入的单元格

Excel capture of C7

请注意填充的值,这是因为我打开了这两本工作簿,全部#REF!单元格包含与填充单元格相同的公式。

如果您需要任何其他信息来完成这项繁琐的任务,请告诉我

我也试过微软推荐的方法:

='[20160613 1002257 35000010-01B.xls]Summary'!$E9

用包含文件名的单元格替换文件名:

='["&A7&"]Summary'!$E9

我得到了#REF!在单元格和公式栏中自动更改为:

='(\server5\Operations\MainBoard testing central location DO NOT REMOVE or RENAME\["&A7&"]Summary'!$E9

根据 Microsoft 的说法,Indirect() 函数必须打开工作簿。您可以使用 VBA 循环浏览目录,以使用此路径获取单元格值。

获得了一个 UDF,下面是您如何添加它:

  • 在 excel 中打开 Visual Basic 编辑器(功能区的“开发”选项卡 - 您可能需要进入 Excel 选项才能取消隐藏)。

  • 右键单击 VBA Project([您的工作簿名称]),突出显示插入,然后单击模块。

  • 将以下内容粘贴到 module1 并将工作簿另存为 .xlsm。

代码:

Function GetField(Path As String, WorksheetName As String, CellRange As String) As Variant

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rng As Range

    Set wb = GetObject(Path)
    Set ws = wb.Worksheets(WorksheetName)
    Set rng = ws.Range(CellRange)

    Application.DisplayAlerts = False
    wb.Saved = True            
    wb.Close SaveChanges:=False
    Application.DisplayAlerts = True
End Function

然后您只能在此工作簿中使用 =GetField()。

参数: =getfield("\server5\Operations\MainBoard testing central location DO NOT REMOVE or RENAME\"&A6,"Summary","E9")

仅测试了一个文件,但您应该能够在 rows/columns 中对多个文件使用单元格引用、文件名等。

-确认这适用于多个 Rows/Columns

编辑:更改了关闭工作簿的方式,这些代码来自 Alistair Weir 在另一个问题中提供的一些代码。