Vba 嵌套循环无法正常运行

Vba 嵌套循环无法正常运行,vba,excel,Vba,Excel,我有一个嵌套循环,它首先使用for循环将所有ref单元格更改为白色字体,然后在sub-for循环中删除ref单元格。代码运行,但仍有一个或两个单元格存在引用错误。将需要帮助来整理代码,以便它可以删除所有引用错误,而不是大部分错误!多谢各位 Sub Delete_ref_basedontextcondition() Dim R As Range Dim w As Long, ref As Range Dim refi As Range On Error Resume

我有一个嵌套循环,它首先使用for循环将所有ref单元格更改为白色字体,然后在sub-for循环中删除ref单元格。代码运行,但仍有一个或两个单元格存在引用错误。将需要帮助来整理代码,以便它可以删除所有引用错误,而不是大部分错误!多谢各位

Sub Delete_ref_basedontextcondition()
    Dim R As Range
    Dim w As Long, ref As Range
    Dim refi As Range
    On Error Resume Next
    'Set rng = Nothing
    On Error Resume Next
        Set R = Application.InputBox("Select cells To be deleted", Type:=8)
        Dim rng As Range
        If TypeName(R) <> "Range" Then
            Exit Sub
        Else
            R.Delete
        End If
        For w = 1 To Worksheets.Count
            With Worksheets(w)
                For Each ref In .Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
                    If ref.Text = "#REF!" Then
                        ref.Font.ColorIndex = 2
                        For Each refi In .Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
                            If refi.Text = "#REF!" Then
                                refi.Delete
                            End If
                        Next refi
                    End If
                Next ref
            End With
        Next w
End Sub
Sub Delete\u ref\u basedontextcondition()
调光范围
尺寸w等于长度,参考值等于范围
调暗refi As范围
出错时继续下一步
'设置rng=无
出错时继续下一步
设置R=Application.InputBox(“选择要删除的单元格”,类型:=8)
变暗rng As范围
如果TypeName(R)“范围”,则
出口接头
其他的
R.删除
如果结束
对于w=1的工作表。计数
带工作表(w)
对于特殊单元格中的每个参考单元格(xlCellTypeFormulas,xlErrors)
如果ref.Text=“#ref!”则
ref.Font.ColorIndex=2
对于每个refi In.Cells.SpecialCells(xlCellTypeFormulas,xlErrors)
如果refi.Text=“#REF!”则
参考。删除
如果结束
下一次再融资
如果结束
下一个参考
以
下一个w
端接头

我相信流氓
\REF实际上是由
refi.Delete
创建的,因此在创建之前定义的循环会忽略它。改用
refi.Clear
。你只想删除坏的公式;您不希望删除该单元格并移动其周围的其他单元格(从而创建新的
\REF!
错误)


把它想象成一个装满了#REF!错误。每次你拿出一个,另一个就会进来代替它。用
关闭盖子。清除
而不是用
弹出盖子。删除
我相信流氓
\REF实际上是由
refi.Delete
创建的,因此在创建之前定义的循环会忽略它。改用
refi.Clear
。你只想删除坏的公式;您不希望删除该单元格并移动其周围的其他单元格(从而创建新的
\REF!
错误)


把它想象成一个装满了#REF!错误。每次你拿出一个,另一个就会进来代替它。用
关闭盖子。清除
而不是用
弹出单元格。删除

为什么先用白色字体标记单元格中已损坏的引用,然后再删除?为什么每个循环都需要第二个
?为什么不使用
ref.delete
而不是
ref.font.colorindex=2
跳过第二个循环呢?它仍然会执行不完全的删除@PsycholineBolace?您可以提供一个预期结果的示例吗?是否删除带有#ref错误的单元格会导致循环中已检查的另一个单元格报告错误#参考错误?单元格可能不包含错误-它只是引用了一个包含错误的单元格。只是一些想法。:)为什么先用白色字体标记引用已损坏的单元格,然后再将其删除?为什么每个循环都需要第二个
?为什么不使用
ref.delete
而不是
ref.font.colorindex=2
跳过第二个循环呢?它仍然会执行不完全的删除@PsycholineBolace?您可以提供一个预期结果的示例吗?是否删除带有#ref错误的单元格会导致循环中已检查的另一个单元格报告错误#参考错误?单元格可能不包含错误-它只是引用了一个包含错误的单元格。只是一些想法。:)我需要删除,因为删除和引用的数据在两个不同的表中。例如,我有一个分别包含水果、颜色和价格的表,分为3列。如果我要清除颜色的内容,水果和价格之间会有差距。即使我只使用一个循环来删除参考单元格,也会出现同样的问题,因此它不是refi循环。我需要删除,因为删除和引用的数据在两个不同的表中。例如,我有一个分别包含水果、颜色和价格的表,分为3列。如果我要清除颜色的内容,水果和价格之间会有一个差距。即使我只使用一个循环删除参考单元格,也会出现同样的问题,因此它不是refi循环。