2017-04-24 4 views
0

J'ai un code VBA dans Access qui analyse le corps d'un e-mail pour un numéro de série spécifique. Le numéro de série a précédemment commencé avec un 2 suivi de trois lettres, puis de 5 numéros. J'utilisais quelque chose comme le code affiché pour rechercher les préfixes les plus courants. Maintenant, ils ont changé les numéros de série pour éliminer les 2 et avec ma méthode actuelle, cela rend le texte incorrect plus probable. EMText est une chaîne contenant le corps de l'e-mail. Le nouveau format est ABC12345D1234 cela peut être n'importe quelle combinaison de lettres ou de chiffres, mais les lettres sont toujours des lettres et les chiffres sont toujours des nombres. Y at-il un moyen rapide de rechercher quelque chose avec cette longueur spécifique et le nombre de lettres et de chiffres ou le format spécifique. J'ai du mal à trouver quelque chose qui ne soit pas trop compliqué par moi-même et je ne peux pas trouver un exemple qui corresponde à ce que j'essaie de faire.analyse des numéros de série

Function GetUnitNumber(ByVal EMText) As String 

    unit = "" 

If InStr(1, EMText, "2ABC") Then 

    vItem = Split(EMText, "2ABC") 
    unit = "2ABC" & Left(vItem(1), 5) 

ElseIf (InStr(1, EMText, "2CA")) Then 

    vItem = Split(EMText, "2CA") 

    unit = "2CA" & Left(vItem(1), 6) 

ElseIf (InStr(1, EMText, "2DFS")) Then....... 
+0

Pourquoi voudriez-vous saisir du texte incorrect? Voulez-vous dire «rend le texte correct saisissant beaucoup plus difficile»? – June7

Répondre

1

Ceci est un scénario typique pour les expressions régulières.

Lien vers Microsoft VBScrpt Regular Expressions

Et utiliser ceci:

Function GetUnitNumber(ByVal EMText) 

Dim regEx As New RegExp 

With regEx 
    .Global = True 
    .MultiLine = True 
    .IgnoreCase = True 
    'This matches the pattern: i.e. ABC12345D1234 
    .Pattern = "[A-Z]{3}[0-9]{5}[A-Z]{1}[0-9]{4}" 
End With 

If regEx.Test(EMText) Then 
    GetUnitNumber = regEx.Execute(EMText)(0) 
End If 

End Function