2017-04-24 13 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 
関連する問題