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

是否使用vba验证excel中的单元格?,excel,vba,Excel,Vba,我试图用vba检查一个单元格是否包含不少于7到不超过10个字符。我还想检查是否只有数字被放入单元格,而没有字母,除非字符“GB”作为一系列数字的前缀 所以如果我打字 “12345678”在我的单元格中,则这是一个有效条目,我没有收到错误消息,如果我键入“GB1234567”,则这也是一个有效条目 但是,如果我键入“12343543GB”,这是无效的,或者如果我键入任何其他字母,如“hgdfegfs”,这是无效的 有人知道我如何调整代码以使其正常工作吗?谢谢 If Len(Range("D21")

我试图用vba检查一个单元格是否包含不少于7到不超过10个字符。我还想检查是否只有数字被放入单元格,而没有字母,除非字符“GB”作为一系列数字的前缀

所以如果我打字

“12345678”在我的单元格中,则这是一个有效条目,我没有收到错误消息,如果我键入“GB1234567”,则这也是一个有效条目

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

有人知道我如何调整代码以使其正常工作吗?谢谢

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
如果Len(范围(“D21”).值)<7或不是数字(范围(“D21”).值),则
Dim AckTime2为整数,InfoBox2为对象
Set InfoBox2=CreateObject(“WScript.Shell”)
'将消息框设置为10秒后关闭
AckTime2=1.5
选择案例信息框2。弹出(“Ooops!”&vbNewLine&vbNewLine&“请返回并检查增值税编号”_
AckTime2,“无法提交表单!”,0)
案例1,-1
结束选择
其他的
MsgBox“无错误”
如果结束

就我个人而言,我会避免用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)))

=IF(AND(LEN(A1)>=7,LEN(A1)您也可以尝试以下方法:

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
Sub-chekk()
设置rngg=范围(“D21”)
Valu=rngg.值
numPart=Mid(瓦卢,3)
如果(IsNumeric(numPart)和Mid(Valu,1,2)=“GB”)或IsNumeric(Valu),则
如果Len(Valu)>=7且Len(Valu)<10,则
MsgBox“有效”
其他:MsgBox“无效”
如果结束
其他:MsgBox“无效”
如果结束
端接头

为什么要在vba中使用shell来实现此目的?