VBA用于数据验证

问题描述 投票:0回答:1

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

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
excel vba excel-vba
1个回答
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会一次又一次地触发事件,直到您的堆栈空间不足为止。为了使它更具防弹性,我还添加了一个错误处理程序,以确保在出现错误时再次启用事件处理程序。

© www.soinside.com 2019 - 2024. All rights reserved.