使用vba验证excel中的单元格?

时间:2014-11-14 08:25:28

标签: excel vba

我试图使用vba检查一个单元格是否包含不少于7个字符且不超过10个字符。我还想检查只有数字被放入单元格而没有字母,除非字符'GB'加上一系列数字。

所以,如果我输入

'12345678'在我的单元格中,这是一个有效的条目,我没有收到错误消息,如果我输入'GB1234567',那么这也是一个有效的条目。

但是,如果我输入“12343543GB”这是无效的,或者我输入任何其他字母如“HGDFEGEFS”这是无效的

有谁知道如何调整我的代码才能让它工作?感谢

If Len(Range("D21").Value) < 7 Or Not IsNumeric(Range("D21").Value) Then
Dim AckTime2 As Integer, InfoBox2 As Object
    Set InfoBox2 = CreateObject("WScript.Shell")
    'Set the message box to close after 10 seconds
    AckTime2 = 1.5
    Select Case InfoBox2.Popup("Ooops!" & vbNewLine & vbNewLine & "Please go back and check the VAT number.", _
    AckTime2, "Cannot Submit the Form!", 0)
        Case 1, -1
    End Select

Else

MsgBox "No Error"
End If

2 个答案:

答案 0 :(得分:2)

就我个人而言,我会避免在VBA中对验证进行编码,因为当您的代码库成熟并且其他人保留它时,很难找到它。

我考虑在工作表上进行验证。如果A1包含文本,那么这个公式

=IF(AND(LEN(A1)>=7, LEN(A1)<=10),IF(ISNUMBER(A1),TRUE,IF(LEFT(A1,2)="GB",ISNUMBER(MID(A1,3,10)),FALSE)))

为您进行验证。 (它有点笨拙,但你总是可以把它分成多个单元格。)然后你可以将这个单元格与Excel的单元格验证一起使用,并完全避免使用VBA。

另一种方法是使用VBA验证正则表达式。但不幸的是,这不是在VBA本地构建的。

答案 1 :(得分:0)

你也可以试试这个:

Sub chekk()
Set rngg = Range("D21")
Valu = rngg.Value
numPart = Mid(Valu, 3)

If (IsNumeric(numPart) And Mid(Valu, 1, 2) = "GB") Or IsNumeric(Valu) Then

    If Len(Valu) >= 7 And Len(Valu) < 10 Then
    MsgBox "valid"
    Else: MsgBox "invalid"
    End If

Else: MsgBox "invalid"
End If

End Sub