使用单元格

时间:2016-09-07 20:00:06

标签: excel vba excel-formula excel-indirect

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

“\ server5 \ Operations \ MainBoard测试中心位置不要删除或重命名”

我创建了一个Excel工作簿,将每个单独测试的所有信息输入到一张工作表中。然后,我使用VBA来提取文件的名称,并在同一工作簿的第二个工作表上添加指向该文件的链接。我将这些文件链接到表1。

接下来,我将与执行的测试相对应的顶行中的所有信息添加到每个工作簿(Test)的单行中。

现在我需要在新工作簿上填充工作表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

1 个答案:

答案 0 :(得分:2)

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

获得了UDF,以下是您添加它的方式:

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

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

  • 将下面的内容粘贴到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测试中心位置不要删除或重命名”& A6,“摘要”,“E9”)

仅使用一个文件进行测试,但您应该能够在行/列中使用单元格引用,文件名等多个文件。

- 确认这适用于多个行/列

修改:更改了Alistair Weir在其他问题中提供的某些代码关闭工作簿的方式。

相关问题