我正在制作一张纸来计算价格.该表必须引用其他几个工作簿来获取不同组件的价格.这在我的计算机上工作正常,但当我将它们移动到服务器或另一台计算机时,它找不到引用.
我的文件夹结构如下:
Folder
|-- prices.xlsx
|-- Fixed Components
| |-- ComponentsA.xlsx
| +-- ComponentsB.xlsx
|
+-- Variable Components
|-- ComponentsC.xlsx
+-- ComponentsD.xlsx
Run Code Online (Sandbox Code Playgroud)
prices.xlsx是引用其他工作表的主要工作表.在我的计算机上,它使用绝对路径构建引用,因此当我复制文件时,路径保持固定在我的机器上,而不是引用另一台PC上的文件.
有没有办法使引用相对,以便我可以在主表中放入类似的东西='\Variable Components\[ComponentsC.xlsx]Sheet1'!A1.我不想为此使用VBA,因为人们不倾向于信任宏,然后抱怨功能不起作用.
我见过将外部文件组织到子文件夹中的唯一解决方案需要使用VBA来解析公式中外部文件的完整路径.以下是指向其他人使用过的几个示例的网站链接:
http://www.teachexcel.com/excel-help/excel-how-to.php?i=415651
或者,如果您可以将所有文件放在同一文件夹中而不是将它们分成子文件夹,那么即使您将文件移动到网络位置,Excel也将解析外部引用而无需使用VBA.然后您的公式变得简单='[ComponentsC.xlsx]Sheet1'!A1,没有要遍历的文件夹名称.
小智 6
我有一个类似的问题,我通过使用以下序列解决:
使用该CELL("filename")函数获取当前文件当前工作表的完整路径.
使用该SEARCH()函数查找当前excel文件和工作表的[FileName] SheetName字符串的开头.
使用该LEFT函数提取包含当前文件的目录的完整路径名.
将步骤3中找到的目录路径名称与文件名,工作表名称和要访问的单元格引用相连接.
使用该INDIRECT()函数访问CellPathName您在步骤#4中创建的函数.
注意:这些相同的步骤也可用于访问名称是动态创建的文件中的单元格.在步骤#4中,使用从单元格内容,当前日期或时间等动态创建的文本字符串.
包含所有这些步骤的单元格参考示例(每个单独组装)是:
=INDIRECT("'" & LEFT(CELL("filename"),SEARCH("[MyFileName]MySheetName",CELL("filename")) - 1) & "[" & "OtherFileName" & "]" & "OtherSheetName" & "'!" & "$OtherColumn$OtherRow" & "'")
Run Code Online (Sandbox Code Playgroud)
请注意,LibreOffice使用稍微不同的CellPatnName语法,如以下示例所示:
=INDIRECT(LEFT(CELL("filename"),SEARCH("[MyFileName]MySheetName",CELL("filename")) - 1) & "OtherFileName" & "'#$" & "OtherSheetName" & "." & "$OtherColumn$OtherRow")
Run Code Online (Sandbox Code Playgroud)