当行被删除时,防止Excel删除公式中的引用

我有一个Excel工作簿与工作表Sheet1Sheet2 ,其中Sheet2具有公式引用Sheet1值,如下所示:

 +-----------+------------+ | address | value | +-----------+------------+ | Sheet1!A1 | 1 | | Sheet1!B1 | 3 | | Sheet1!C1 | 5 | | Sheet2!A1 | =Sheet1!A1 | | Sheet2!B1 | =Sheet1!B1 | | Sheet2!C1 | =Sheet1!C1 | +-----------+------------+ 

如果从Sheet1删除第1行,请使用以下C#interop:

 thisRange["a1"].EntireRow.Delete() 

那么所有的公式被设置为错误,例如=Sheet1!#REF!

一旦行被删除,有没有办法保留公式中现有的引用? 我想我可以将所有的公式复制到一个数组中,然后将它们复制到表单中,但理想情况下我希望它们不会消失。

你想要做的是在Sheet2中使用INDIRECT引用。 这些保持不变,不要抱怨,如果一个单元格或行被移动或删除,他们将可靠地保持指向相同的参考。

所以在你的例子中,你的Sheet2值变成:

 +-----------+------------------------+ | address | value | +-----------+------------------------+ | Sheet2!A1 | =INDIRECT("Sheet1!A1") | | Sheet2!B1 | =INDIRECT("Sheet1!B1") | | Sheet2!C1 | =INDIRECT("Sheet1!C1") | +-----------+------------------------+ 

我将把它留给读者来使参考文本更具dynamic性(例如“Sheet1!A”和ROW())。 见https://superuser.com/questions/316239/how-to-get-the-current-column-name-in-excel

我不知道这种情况不会发生。

就这点而言,我通常用于类似场景的工作是在删除命令期间使公式不再使用公式。 如果在Sheet2的公式之前添加一个文本字母,请完成删除function,在Sheet2公式之前删除文本字母,然后这些函数将仍然有效

工作表Sheet1 =!A1

一个工作表Sheet1 =!A1

工作表Sheet1 =!A1

这可以通过查找replace命令来完成,如果你手动删除行或者如果编程一个函数,我会查看一个范围内的For Each单元格在公式前连接一个“a”,然后通过使用长度为string-1