最近,我在书上找到了用于数据验证的代码,该代码是:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = “$A$1” Then
If Not IsNumeric(Target) Then
MsgBox “Enter a number in cell A1.”
Range(“A1”).ClearContents
Range(“A1”).Activate
End If
End If
End Sub
我想更改它以验证A列中的自定义格式,该格式为XY&6(XY123456),并修改了代码。但是MsgBox会连续弹出,格式错误时我无法关闭它。有人可以给我一些建议。谢谢
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Left(Target.Value, 2) <> "XY" Or
Not IsNumeric(Right(Target.Value,6)) Or
Len(Target.Value) <> 8 Then
MsgBox “Wrong Format”
Target.ClearContents
Target.Activate
End If
End If
End Sub
答案 0 :(得分:1)
将代码更改为
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo EH
If Target.Column = 1 Then
If Left(Target.Value, 2) <> "XY" Or Not IsNumeric(Right(Target.Value, 6)) Or Len(Target.Value) <> 8 Then
Application.EnableEvents = False
MsgBox "Wrong Format"
Target.ClearContents
Target.Activate
End If
End If
EH:
Application.EnableEvents = True
End Sub
您需要关闭事件,否则Target.ClearContents
将一次又一次触发事件,直到堆栈空间用完。为了使它更加安全,我还添加了一个错误处理程序,以确保在发生错误时再次打开事件处理程序。