2

我是一个应用程序的作者,该应用程序在打开 Excel 工作簿之前会删除并重新创建一些工作表,例如下例中的“Sheet1”。

同一工作簿中的其他工作表(例如 Sheet2)可能具有引用替换工作表的公式,如下所示:

=IF('Sheet1'!A9="","",'Sheet1'!A9)

不幸的是,当替换工作表时,上述公式中对 Sheet1 的引用被破坏,变为

=IF(#Ref!A9="","",#REF!A9)

谁能想出一种方法来编写这个公式,这样它就不会失败?例如,它可以从 Sheet2 中的隐藏单元格中获取工作表的名称还是什么?

我只是对 Excel 公式知之甚少,不知道有什么可能性。

TIA

4

1 回答 1

6

使用间接寻址和命名范围

1) 使用填充有文本“SheetN!”的幻像单元(即 Z1...Zn)对于您要删除的每张工作表。

2)为这些表中的所有外部可寻址单元格和范围定义范围名称

3)在您的公式中,将引用替换为“间接”和命名范围的 LITERAL。

例子:

代替

    =Sum(Sheet1!A:A)   

    =SUM(INDIRECT(Z1&"caca"))  

其中“caca”是在 Sheet1 中定义为 A:A 的命名范围,Z1 包含“Sheet1!”

另一个例子:

代替

    =Sheet1!A1+Sheet1!A2

    =INDIRECT(Z1&"NamedRangeForA1")+INDIRECT(Z1&"NamedRangeForA2")  

现在您可以删除 Sheet1 而不会出现引用问题。

添加新的 Sheet1 时,您应该重新创建(在 VBA 中)命名范围。

编辑:回答您对名称中包含空格的表格的评论

在这种情况下,你需要额外的 :)

用这个:

 =INDIRECT("_'_" & Z1& "_'_!_" & "caca")  

“_”应该被删除,因为我将它们插入那里只是为了方便单引号和双引号的可视化。

在单元格 Z1 中输入不带引号和感叹号的 Sheet1 的名称(因为它已经在公式中)。

于 2010-11-01T17:38:21.043 回答