#Ref 错误时删除其中一张表

Posted

技术标签:

【中文标题】#Ref 错误时删除其中一张表【英文标题】:#Ref error when delete one of the sheets 【发布时间】:2013-05-27 15:25:45 【问题描述】:

我有从 1 到 50 的工作表和一个汇总表,其中包含基于工作表 1 到工作表 50 的公式(非常长的公式!)。但是,每当我运行宏时,宏都会删除 50 张表中的一张,并且我在摘要表中的所有公式都变为 #Ref。

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

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

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

我必须沿列和跨行拖动此公式。

有没有办法快速做到这一点并摆脱#Ref 错误?我不介意在宏或基于公式的情况下这样做。请帮忙。谢谢!

【问题讨论】:

您只是想摆脱#Ref! 并仍然使用您的宏吗?您可以复制汇总表中的所有单元格并粘贴为值(选择性粘贴 > 粘贴值)以删除公式。 看看这个link 您可以在宏中添加逻辑以在删除表之前修改汇总表中的公式,然后将修改后的公式放回汇总表中;您可以尝试在搜索中搜索并替换 #REF 值 - 我无法手动完成此操作,但 see this thread 了解如何以编程方式执行此操作的一些想法(我会尝试弄清楚为了我自己的满意,也是)。 删除第 50 张纸后,是否有新纸可以替换缺失的一张,或者您需要保留 49 张? 【参考方案1】:

在删除工作表操作后,将类似以下内容添加到您的宏中。使用正确的引用,它将替换摘要表中#REF 公式的所有实例。您可能需要创造性地调整WHAT:= 子句,使其与公式的#REF 子句相匹配。

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

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

【讨论】:

【参考方案2】:

您可以在删除之前添加一些代码,这将删除您想要删除的带有工作表名称的表达式。

例如像“=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 的解决方案更好更快,但您可以在移除工作表之前应用他的解决方案。

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

对不起我可笑的英语。

【讨论】:

以上是关于#Ref 错误时删除其中一张表的主要内容,如果未能解决你的问题,请参考以下文章

两张表 在一张表中插入数据时要使用触发器也更新另一张 有错误

VBA循环使用另一张表中的数据更新图表中的系列

删除一张表中与另一张表中相同的记录

excel表格公式出现#REF是什么意思

Oracle如何删除一张表内的重复数据,但保留最新的一条?

SQL删除多列语句