使用vba在excel中validation单元格?

我试图检查,使用VBA,是否一个单元格包含不less于7和不超过10个字符。 我也想检查一下,只有数字是放在单元格中,没有字母,除非字符'GB'前面有一系列数字。

所以如果我input

'12345678'在我的单元格,那么这是一个有效的条目,我没有得到一个错误信息,如果我input“GB1234567”,那么这也是一个有效的条目。

但是,如果我input“12343543GB”这是无效的,或者如果我input任何其他字母,如“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 

你也可以试试这个:

 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 

就个人而言,我会避免在VBA中对validation进行编码,因为在您的代码库成熟和其他人员维护它时很难find它们。

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

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

为你做validation。 (这是有点笨拙,但你总是可以把它分成多个单元格。)然后你可以将这个单元格与Excel的单元格validation结合使用,并完全避免使用VBA。

另一种select是使用VBA来validation正则expression式 。 但不幸的是,这不是在VBA本地build立的。