我有一个包含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中输入的单元格
请注意填充值,这是因为我打开了这两本工作簿,全部是#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
答案 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在其他问题中提供的某些代码关闭工作簿的方式。