2010-11-19 22 views

Répondre

2

Si vous voulez que la façon la plus simple, vous pouvez aller avec ceci:

Function MyFunction(myString As String) As Boolean 
    MyFunction = ((Len(myString) = 5) And (IsNumeric(myString))) 
End Function 

Si vous vouloir le moyen le plus efficace, vous devrez exécuter des tests pour les différentes méthodes les gens ont suggéré.

Editer: La solution précédente ne fonctionne pas bien (voir les 2 premiers commentaires) mais je la laisse là car c'est ce qui a été accepté. Voici ce que je ferais:

Function MyFunction(myString As String) As Boolean 
    Dim myDouble As Double 
    Dim myLong As Long 
    myDouble = Val(myString) 
    myLong = Int(myDouble/10000) 
    MyFunction = ((Len(myString) = 5) And (myLong > 0) And (myLong < 10)) 
End Function 

Il n'y a pas d'erreur « protection » dans cette fonction, donc si vous essayez de vérifier un trop grand nombre comme 22222222222222, ça ne marchera pas.

+2

Un nombre négatif à quatre chiffres passerait ces deux essais - par exemple, -3621 a cinq caractères et est numérique. Les points décimaux (36,21) ou les milliers de séparateurs (3 621) causeraient aussi des problèmes. – barrowc

+0

Assez vrai! De plus, si la chaîne est "00005", je crois que la validation serait réussie. – Tipx

4
yourString Like "#####" 
1

question similaire a demandé précédemment: link text

veulent en principe vérifier

(Len(s) = 5) And IsNumeric(s) 
1

Vous pouvez également utiliser des expressions régulières pour résoudre ce problème. Si vous incluez Microsoft VBScript Regular Expressions 5.5 dans votre projet VBA, vous pouvez utiliser les variables RegExp et MatchCollection comme dans la fonction ci-dessous. (Ceci est une modification de la réponse à this post à ozgrid.com.)

Public Function FiveDigitString(strData As String) As Boolean 

On Error GoTo HandleError 

Dim RE As New RegExp 
Dim REMatches As MatchCollection 

    With RE 
     .MultiLine = False 
     .Global = False 
     .IgnoreCase = True 
     .Pattern = "^[0-9][0-9][0-9][0-9][0-9]$" 
    End With 

    Set REMatches = RE.Execute(strData) 
    If REMatches.Count = 1 Then 
     FiveDigitString = True 
    Else 
     FiveDigitString = False 
    End If 

    Exit Function 
HandleError: 
    Debug.Print "Error in FiveDigitString: " & Err.Description 
    FiveDigitString = False 
End Function