我试图使用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
答案 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