Excel 错误时显示单元格地址和消息框并退出宏,如果没有,则继续
在退出宏之前,我想先检查我的范围中是否有#NA错误,然后显示包含错误的单元格地址。这就是我到目前为止所做的 现在,如果存在错误,我希望显示一个Excel 错误时显示单元格地址和消息框并退出宏,如果没有,则继续,excel,vba,Excel,Vba,在退出宏之前,我想先检查我的范围中是否有#NA错误,然后显示包含错误的单元格地址。这就是我到目前为止所做的 现在,如果存在错误,我希望显示一个MsgBox警告用户错误,并停止程序的其余部分执行,如果没有错误,我希望它继续执行程序的其余部分 检查NA错误: For Each c In myRange If IsError(c) = True Then Debug.Print c.Address End If Next c MsgBox "Check for
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
我认为这会起作用:
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
这将把错误的所有地址写在一个字符串中,并在代码运行后显示它们:
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
,并退出sub
根据我的评论,您也可以尝试使用
特殊单元格来避免任何迭代:
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)
您不能在调试后放入MsgBox
并退出Sub
。在中打印如果有条件?@Teamothy确定,如果可能的话,我还想显示包含错误的单元格列表:)使用特殊单元格而不是完整的循环检查数组是否初始化并获得错误,如果没有,被错误恢复下一步时的捕获确实不是好代码。为了避免这种情况,请考虑<代码>如果没有Error数组,然后调试。打印“数组中没有元素”…<代码>。作为奖励,您的代码中根本不需要On Error Resume Next
,您可以随意扔掉一些无用的行。对于这种检查数组是否为空的方法,我将给出一个巨大的谢谢:)
,但它不能正常工作:(在vba工作的5年中,我找不到更好的解决方案来进行此检查,因为无法引发并捕获异常…享受-您可能只使用了一个Not
。代码中有Not Not
@neutronhammer-竖起大拇指:)