显示错误的单元格地址和消息框,然后退出宏,如果没有,请继续
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
并退出子程序。
另一答案
我认为这可以解决问题:
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)
。
以上是关于显示错误的单元格地址和消息框,然后退出宏,如果没有,请继续的主要内容,如果未能解决你的问题,请参考以下文章