显示错误的单元格地址和消息框,然后退出宏,如果没有,请继续

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了显示错误的单元格地址和消息框,然后退出宏,如果没有,请继续相关的知识,希望对你有一定的参考价值。

我想先检查我的Range中是否有#NA错误,然后在退出宏之前显示包含该错误的单元格地址。这是我到目前为止所做的。

现在,如果存在错误,我想显示一个MsgBox,警告用户该错误并停止执行程序的其余部分,但是如果没有,我希望它继续运行进入程序的其余部分

检查NA错误:

For Each c In myRange

    If IsError(c) = True Then

        Debug.Print c.Address

    End If

Next c

MsgBox "Check for errors and run gain"

Exit Sub

'continuation of the program
答案

此错误将所有错误地址写入一个字符串,并在代码运行后显示它们:

Sub TestMe()

    Dim myRange As Range
    Dim myCell As Range
    Dim errorList As String

    Set myRange = Worksheets(1).Range("A1:C10")

    For Each myCell In myRange
        If IsError(myCell) Then
            errorList = errorList & vbCrLf & myCell.Address
        End If
    Next

    If Len(errorList) > 0 Then
        MsgBox errorList
        Exit Sub
    End If

End Sub

循环后,检查1Len(errorList),如果它大于0,则显示MsgBox并退出子程序。

enter image description here

另一答案

我认为这可以解决问题:

Dim errorArray()
Dim i As Integer
Dim checkArray As Integer
Dim errorString As String

For Each c In myRange
    If IsError(c) = True Then
        ReDim Preserve errorArray(i)
        errorArray(i) = c.Address
        i = i + 1
    End If
Next c

On Error Resume Next
checkArray = UBound(errorArray)

If Err = 0 Then
    errorString = "An error(s) occured in following cell(s):" & Chr(10)
    For i = 0 To UBound(errorArray)
        errorString = errorString & errorArray(i) & Chr(10)
    Next

    MsgBox errorString

    Exit Sub

End If

Err.Clear
On Error GoTo 0
另一答案

根据我的评论,您也可以尝试使用SpecialCells以避免任何迭代:

Sub test()

Dim rng As Range

With Sheet1 'Change according to your sheets CodeName

    'Setup your range to check for errors
    Set rng = .Range("A1:C4")

    'Check if any errors exist and act if they do
    If .Evaluate("SUM(IF(ISERROR(" & rng.Address & "),1))") > 0 Then
        MsgBox "Still errors in " & rng.SpecialCells(-4123, 16).Address(False, False)
        Exit Sub
    End If

End With

End Sub

如果您的单元格不是公式的结果,而是常量,请从SpecialCells(-4123, 16)更改为SpecialCells(2, 16)

以上是关于显示错误的单元格地址和消息框,然后退出宏,如果没有,请继续的主要内容,如果未能解决你的问题,请参考以下文章

如果找不到值,则显示消息框

在 Select Case 语句中循环没有 Do 错误

VBA如果单元格小于一定长度,突出显示并显示消息

删除空白单元格

对于每个循环但在消息框中没有循环

如何比较两列之间的字符,并使用宏突出显示相同的单元格