最近,我在一本书上找到了一个用于数据验证的代码,它是:
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
将您的代码更改为
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
会一次又一次地触发事件,直到您的堆栈空间不足为止。为了使它更具防弹性,我还添加了一个错误处理程序,以确保在出现错误时再次启用事件处理程序。