【问题标题】:1004 No cells were found - Error Handling1004 未找到单元格 - 错误处理
【发布时间】:2019-08-09 01:06:30
【问题描述】:

任何人都可以建议如何使用以下代码处理“未找到单元格”错误。这是一个较大的 sub 的一部分,通常可能不返回任何值,但是按如下方式处理错误(适用于我的许多其他场景)仍然返回“运行时错误'1004':未找到单元格”。我做错了什么?

On Error GoTo Error_Exit_3
    Range("Q:Q").SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete
Error_Exit_3:

【问题讨论】:

标签: excel vba debugging


【解决方案1】:

请检查下面的链接。它已经在这个论坛上回答了。 另外,请访问此论坛的规则.. :)

1004 Error: No cells were found, easy solution?

【讨论】:

  • 非常感谢,这篇文章在我搜索了 60 分钟的过程中没有出现。
  • 欢迎@DannyBarnes01,不要忘记将其标记为其他用户参考的答案。
  • 请忽略上面的cmets,因为这是我目前使用的相同方法,仍然返回错误。
  • @DannyBarnes01 尝试将静态范围放在您的代码中。 --> ` Range("Q:Q")`
【解决方案2】:

我会做什么:

Dim RowsWithFormulas As Long

On Error Resume Next
RowsWithFormulas = Range("Q:Q").SpecialCells(xlCellTypeFormulas, 16).Rows.Count
On Error GoTo 0
If RowsWithFormulas > 0 Then
    Range("Q:Q").SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete
End If

【讨论】:

  • 感谢 Damian 的帮助,但是如果没有单元格出现错误,此解决方案仍然会以相同的方式出错。另请注意我对 BruceWayne 解决方案的评论。
  • 这段代码是否在循环中?否则,这不可能给你一个错误。如果它是循环的一部分,请在 On Error Resume Next 之前使用:RowsWithFormulas = 0
  • 它不是循环的一部分,因此我很困惑。我必须通过在 Q 列中将返回和错误的数据写入一行来解决该问题,以便始终至少找到 1 条记录。不理想,但足够解决。
  • 哪里出错了?我的答案中的代码计算有错误的行数,如果没有,因为它使用On Error Resume Next 并且因为它是Long 变量,所以它的值为0。稍后将检查变量,如果> 0 它将删除,否则不会执行任何操作。
【解决方案3】:

您也可以将其设置为范围:

Sub t()
Dim cellsWithErroringFormulas As Range

On Error Resume Next
Set cellsWithErroringFormulas = Range("Q:Q").SpecialCells(xlCellTypeFormulas, 16)
On Error GoTo 0

If cellsWithErroringFormulas Is Nothing Then
   ' Do whatever
    MsgBox ("No formulas result in an error!")
    Exit Sub
ElseIf cellsWithErroringFormulas.Rows.Count > 0 Then
    cellsWithErroringFormulas.SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete
    ' Now, if you call `cellsWithErroringFormulas` again, it will error since you removed all those references.
    ' So to be explicit, let's clear that variable.
    Set cellsWithErroringFormulas = Nothing
End If

End Sub

我调整了变量名称,只是因为从技术上讲,您不是在寻找带有公式的行,而是在寻找带有导致错误的公式的单元格。这里有点笨拙,所以根据需要重命名。只是想指出这一点。

另外,由于我不知道您接下来打算做什么,我添加了Set cellsWithErroringFormulas = Nothing,因为在您删除错误行后我们无法使用该引用。你可能不需要那个,但我只是想包括在内以指出这一点。

【讨论】:

  • 感谢您的帮助,但是如果没有错误的单元格,此解决方案仍然会以相同的方式出错。在这种情况下,它会在Set 上出错。同样关于下一个动作,这是一个 sub 的结尾,后面只有 ActiveWorkbook.Save 和一个 MsgBox 用于完成。
  • @Daniel-Barnes 它对你有错误吗?它不适合我,这很奇怪
猜你喜欢
  • 2015-07-06
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多