我正在制作一张表格来计算价格。工作表必须具有对其他几个工作簿的引用,才能获得不同组件的价格。这在我的计算机上运行良好,但当我将它们移动到服务器或另一台计算机时,它找不到引用。
我的文件夹结构如下:
Folder
|-- prices.xlsx
|-- Fixed Components
| |-- ComponentsA.xlsx
| +-- ComponentsB.xlsx
|
+-- Variable Components
|-- ComponentsC.xlsx
+-- ComponentsD.xlsx
prices.xlsx
是引用其他工作表的主工作表。在我的计算机上,它使用绝对路径构建引用,因此当我复制文件时,该路径将固定在我的计算机上,而不是引用另一台PC上的文件。
有没有办法使引用成为相对的,这样我就可以在主表中放入像='\Variable Components\[ComponentsC.xlsx]Sheet1'!A1
这样的东西。我不想使用VBA来解决这个问题,因为人们往往不信任Macros,然后抱怨这些函数不起作用。
发布于 2012-07-24 12:56:04
我所见过的将外部文件组织到子文件夹中的唯一解决方案需要使用VBA来解析公式中外部文件的完整路径。以下是一个站点的链接,其中包含其他人使用过的几个示例:
http://www.teachexcel.com/excel-help/excel-how-to.php?i=415651
或者,如果可以将所有文件放在同一个文件夹中,而不是将它们拆分为多个子文件夹,则即使将文件移动到网络位置,Excel也将解析外部参照,而无需使用VBA。然后,您的公式就变成了简单的='[ComponentsC.xlsx]Sheet1'!A1
,没有要遍历的文件夹名称。
发布于 2014-01-25 22:05:45
我有一个类似的问题,我通过使用以下序列解决了这个问题:
CELL("filename")
函数获取当前文件当前工作表的完整路径。SEARCH()
函数查找当前excel文件和工作表的FileNameSheetName字符串的开头。LEFT
函数提取包含当前文件的目录的完整路径名。INDIRECT()
函数访问在步骤4中创建的CellPathName
。注意:这些相同的步骤也可用于访问文件中的单元格,这些文件的名称是动态创建的。在第4步中,使用从单元格内容、当前日期或时间等动态创建的文本字符串。
包含所有这些步骤的单元格引用示例(每个部分都单独组装)如下:
=INDIRECT("'" & LEFT(CELL("filename"),SEARCH("[MyFileName]MySheetName",CELL("filename")) - 1) & "[" & "OtherFileName" & "]" & "OtherSheetName" & "'!" & "$OtherColumn$OtherRow" & "'")
请注意,LibreOffice使用的CellPatnName语法略有不同,如下例所示:
=INDIRECT(LEFT(CELL("filename"),SEARCH("[MyFileName]MySheetName",CELL("filename")) - 1) & "OtherFileName" & "'#$" & "OtherSheetName" & "." & "$OtherColumn$OtherRow")
发布于 2014-03-03 14:51:56
通过间接方式更简单、更快捷:INDIRECT("'..\..\..\..\Supply\SU\SU.ods'#$Data.$A$2:$AC$200")
但是,如果工作簿中有大量链接,则indirect()会有性能缺陷
我很怀念像这样的构造: LibreOffice中的['../Data.ods']#Sheet1.A1
。其意图是:如果我在源文件系统的有限目录子树中创建一堆主工作簿和相关的报告工作簿,我可以用完整的工作簿包压缩整个目录子树,并通过电子邮件左右将其发送给其他合作人员。它将被保存在目标系统上的其他绝对路径中,但链接在新的绝对路径中再次工作,因为它是相对于子树根进行编码的。
https://stackoverflow.com/questions/11629633
复制