VBA用于数据验证

时间:2018-09-01 08:58:38

标签: excel vba excel-vba

最近,我在书上找到了用于数据验证的代码,该代码是:

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

1 个答案:

答案 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将一次又一次触发事件,直到堆栈空间用完。为了使它更加安全,我还添加了一个错误处理程序,以确保在发生错误时再次打开事件处理程序。