21

我正在制作一张表格来计算价格。该工作表必须参考其他几个工作簿才能获得不同组件的价格。这在我的计算机上运行良好,但是当我将它们移动到服务器或另一台计算机时,它找不到参考。

我的文件夹结构如下:

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,因为人们不倾向于信任宏,然后抱怨这些功能不起作用。

4

7 回答 7

9

我见过的将外部文件组织到子文件夹中的唯一解决方案需要使用 VBA 来解析公式中外部文件的完整路径。这是一个站点的链接,其中包含其他人使用的几个示例:

http://www.teachexcel.com/excel-help/excel-how-to.php?i=415651

或者,如果您可以将所有文件放在同一个文件夹中而不是将它们分成子文件夹,那么即使您将文件移动到网络位置,Excel 也将解析外部引用而不需要使用 VBA。然后,您的公式变得简单='[ComponentsC.xlsx]Sheet1'!A1,没有要遍历的文件夹名称。

于 2012-07-24T12:56:03.760 回答
7

我有一个类似的问题,我通过使用以下序列解决了:

  1. 使用该CELL("filename")函数获取当前文件当前工作表的完整路径。

  2. 使用该SEARCH()函数查找当前 excel 文件和工作表的 [FileName]SheetName 字符串的开头。

  3. 使用该LEFT函数提取包含当前文件的目录的完整路径名。

  4. 将第 3 步中找到的目录路径名与文件名、工作表名和要访问的单元格引用连接起来。

  5. 使用该INDIRECT()函数访问CellPathName您在步骤#4 中创建的。

注意:这些相同的步骤也可用于访问名称是动态创建的文件中的单元格。在第 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-01-25T22:05:44.650 回答
4

通过间接更容易和更短:INDIRECT("'..\..\..\..\Supply\SU\SU.ods'#$Data.$A$2:$AC$200")

但是,如果工作簿中有很多链接,则间接()具有性能缺陷

我想念这样的结构:['../Data.ods']#Sheet1.A1在 LibreOffice 中。目的在这里:如果我在源文件系统的有限目录子树中创建一堆主工作簿和依赖报告工作簿,我可以用完整的工作簿包压缩整个目录子树,并通过电子邮件左右将其发送给其他合作人员。它将保存在目标系统上的某个其他绝对路径中,但链接在新的绝对路径中再次起作用,因为它是相对于子树根进行编码的。

于 2014-03-03T14:51:56.393 回答
1

使用 =worksheetname() 和 =Indirect() 函数,并使用外部引用的 Excel 文件的名称命名父 Excel 文件中的工作表。每个外部引用的 excel 文件都位于它们自己的同名文件夹中。这些子文件夹只是为了更加清晰。


我所做的如下:-

|----B列----------------|----C列------------|

R2) 父文件夹--------> "C:\TEMP\Excel\"

R3) 子文件夹名称 ---> =worksheetname()

R5) 完整路径 --------------> ="'"&C2&C3&"["&C3&".xlsx]Sheet1'!$A$1"

R7) 间接函数-----> =INDIRECT(C5,TRUE)

在主文件中,我说过 5 个工作表,分别标记为 Ext-1、Ext-2、Ext-3、Ext-4、Ext-5。将上述公式复制粘贴到所有五个工作表中。在后台打开所有分别命名的 Excel 文件。由于某种原因,结果不会自动计算,因此必须通过编辑任何单元格来强制更改。Volla,每个外部引用的 Excel 文件的单元格 A1 中的值都在主文件中。

于 2013-04-23T16:54:29.327 回答
1

假设您链接到共享驱动器,例如 S 驱动器?如果是这样,其他人可能以不同的方式映射驱动器。您可能需要使用“官方”驱动器名称//euhkj002/forecasts/bla bla。而不是 S// 在您的链接

于 2015-10-14T14:50:08.723 回答
0

在 Excel 中,有一种方法可以嵌入对文件或目录的相对引用。您可以尝试在 excel 单元格中输入: =HYPERLINK("..\Name_of_file_or_folder\","DisplayLinkName")

于 2020-01-30T05:22:37.127 回答
-1

对我有用的是一个点。我的 Office 是 365。=HYPERLINK(".\Name_of_folder\","DisplayLinkName") =HYPERLINK(".\Name_of_file","DisplayLinkName")

于 2020-05-25T19:34:16.667 回答