2017-04-24 55 views
0

我在Access中有一些VBA代碼,用於掃描特定序列號的電子郵件正文。序列號先前以2開頭,接着是3個字母,然後是5個數字。我正在使用類似發佈的代碼來搜索最常用的前綴。現在他們已經改變了序列號以消除2,並且使用我目前的方法,這使得抓取不正確的文本的可能性更大。 EMText是一個包含電子郵件正文的字符串。掃描序列號

新格式是ABC12345D1234這可以幾乎是任何字母或數字的組合,但字母總是字母,數字總是數字。有沒有一種快速的方法來搜索具有特定長度和字母和數字的數字或特定格式的東西。我有麻煩提出一些自己不太複雜的問題,並且無法找到與我正在嘗試做的事情相匹配的例子。

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

你爲什麼要搶不正確的文本?你是不是認爲「使得正確的文本更加困難」? – June7

回答

1

這是正則表達式的典型場景。

鏈接到微軟VBScrpt正則表達式

,並使用此:

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