#删除其中一张纸时出错

我有1到50张纸和一张基于纸张1到纸张50(非常长的配方!)的公式表的摘要表。 但是,每当我运行macros时,macros将删除50张纸中的一张,并且汇总表中的所有公式都变为#Ref。

我知道我可以使用间接函数,但是我有很长的公式,一个单元格中的公式实际上是指全部50张。 这将花费大量的时间把1的间接函数引用到全部50张。

例如:其中一个单元格的公式是:

if(sheet1!A1=2,1,0)+if(sheet2!A1 = 2,1,0)+...+if(sheet50!A1=2,1,0) 

我必须沿着列和行拖动这个公式。

有没有办法做到这一点,并摆脱#Ref错误? 我不介意在macros观或公式基础上做这个。 请帮忙。 谢谢!

在删除表单操作之后,将以下内容添加到您的macros中。 使用适当的引用,它将replace汇总表中#REF公式的所有实例。 您可能必须具有创造力才能定制WHAT:=子句,以便它与公式的#REF子句匹配。

  Range("<summary sheet name>").Replace What:="+IF(#REF!*)", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False 

PS:请务必首先在您的工作表副本上进行testing!

您可以在删除之前添加一些代码,这将删除表单名称,您要删除的expression式。

例如“= Sheet1!B1 + Sheet2!B1”等公式将为“= + Sheet1!B1”

 Sub test() Dim i As Integer Dim deleteSheetName As String ' sheet name that you want to delete Dim currentFormula As String Dim currentFormulaArr() As String deleteSheetName = "Sheet2" currentFormula = Mid(Cells(1, 1).formula, 2, Len(Cells(1, 1).formula) - 1) currentFormulaArr = Split(currentFormula, "+") Cells(1, 1).formula = "=" For i = 0 To UBound(currentFormulaArr) If Not currentFormulaArr(i) Like "*" & deleteSheetName & "*" Then Cells(1, 1).formula = Cells(1, 1).formula & "+" & currentFormulaArr(i) End If Next i End Sub 

我只为一个单元格。 您需要在每个表单中使用所有使用的单元格进行循环。 我希望你明白我的想法。

我认为,chuff的解决scheme更好更快,但您可以在移除工作表之前应用他的解决scheme。

 ... Range("<summary sheet name>").Replace What:="+IF(" & deleteSheetName & "*)", .... 

对不起,我可笑的英语。