Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Excel VBA确定整个工作簿中的任何单元格中是否存在错误_Excel_Vba - Fatal编程技术网

如何使用Excel VBA确定整个工作簿中的任何单元格中是否存在错误

如何使用Excel VBA确定整个工作簿中的任何单元格中是否存在错误,excel,vba,Excel,Vba,问:如何使用Excel VBA确定整个工作簿中的任何单元格中是否存在错误 通常情况下,错误将被0或#值错误所除,但此列表并非详尽无遗(或者是吗?-我不知道是否存在更多) 是否有一种方法可以确定单元格是否包含错误,然后跳过脚本中的进一步处理,而不弹出调试/警告/错误消息 诸如此类 if value in current.Workbook.cell is error then go to <jump> OR if value

问:如何使用Excel VBA确定整个工作簿中的任何单元格中是否存在错误

通常情况下,错误将被0或#值错误所除,但此列表并非详尽无遗(或者是吗?-我不知道是否存在更多)

是否有一种方法可以确定单元格是否包含错误,然后跳过脚本中的进一步处理,而不弹出调试/警告/错误消息

诸如此类

          if value in current.Workbook.cell is error then go to <jump>
           OR
          if value in old.Workbook.cell is error then go to <jump>
如果current.Workbook.cell中的值为错误,则转到
或
如果old.Workbook.cell中的值为错误,则转到
其中,
jump
是if statmenet末尾但在循环内的标记

脚本将比较两个工作簿之间的值,并使用颜色更新当前工作簿以显示差异

我根本没有VBA经验。但我明白了剧本的要点


非常感谢。

您可以使用VBA中的
IsError()
函数以及工作表中的公式


请参阅以获取示例。

您可以使用
VarType
函数跳过有错误的单元格。例如:

If VarType(ActiveCell.Value) <> vbError Then
    ' do something
End If
如果VarType(ActiveCell.Value)vbError那么
“做点什么
如果结束

VarType
函数对于验证数据类型也非常有用。例如,如果您的代码需要一个日期值,但有时会遇到文本,您可以使用此函数检查数据并优雅地处理异常。

以下是一段代码,它记录在即时窗口中,工作表名称、单元格地址和公式,其中有电子表格公式错误

Dim ws As Worksheet, r As Range

For Each ws In Worksheets
    For Each r In ws.UsedRange
        If IsError(r.Value) Then
            Debug.Print r.Parent.Name, r.Address, r.Formula
        End If
    Next
Next

还有另一种处理方法:在代码中添加
On Error Resume Next
(通常只是放在循环之前)


如果一个单元格是错误的,它只会跳过它并移动到循环中的下一个元素:)

如果您最初的问题是如何使用VBA检测工作簿中任何单元格中的错误,那么您应该寻找一种非常有效的方法-查看每个单元格的时间非常昂贵

有两种选择:

  • 使用Excel的SpecialCell来缩短流程
  • 使用配置为报告电子表格错误的my
  • 有关特殊电池,请参见下面的代码。这利用了现成的错误集合,这些错误以公式形式存在

    请确保常数也有一个错误集合,因此如果您已复制,然后对公式错误运行“粘贴特殊值”,则需要使用
    Set rng1=ws.Cells.SpecialCells(xlConstants,xlErrors)
    来检测这些错误

    您还可以通过以下方式手动使用检测特殊单元格:

    • 选择感兴趣区域中的所有单元格
    • 按F5
    • 点击特殊
    • 在“公式”(或“常量”)下选择“错误”

    请注意,在xl2010之前,存在以下限制:


    我希望忽略(跳过)的可能错误列表#DIV/0#名字#不适用#嗯#裁判#价值非常感谢您,实现了这一点,它似乎已经停止了错误,并允许该过程继续。谢谢您。我假设这需要在每个循环或if语句之前,而不是在文档的开头。我已经把这个加进去了,这很有帮助。谢谢你,在sub或function中只出现一次,它始终有效!我不建议下一步继续出错,因为它将隐藏所有错误,而不仅仅是单元格值出错的地方。对于更复杂的过程,我同意,但如果您所做的只是复制单元格,那么您可以非常确定可能会发生什么错误。我同意最好的方法是对错误进行详细说明,但在错误恢复上,下一步仍然是IMO的几种有效解决方案之一。这并不是我想要的,但谢谢,知道这一点很有用。现在,如果我可以从我的VB中获取错误信息到php脚本中。。。
    Sub ErrorList()
        Dim ws As Worksheet
        Dim rng1 As Range
        Dim strOut As String
        For Each ws In ActiveWorkbook.Sheets
            Set rng1 = Nothing
            On Error Resume Next
            Set rng1 = ws.Cells.SpecialCells(xlFormulas, xlErrors)
            On Error GoTo 0
            If Not rng1 Is Nothing Then strOut = strOut & (ws.Name & " has " & rng1.Cells.Count & " errors" & vbNewLine)
        Next ws
        If Len(strOut) > 0 Then
            MsgBox "Error List:" & vbNewLine & strOut
        Else
            MsgBox "No Errors", vbInformation
        End If
    End Sub