2013-05-22 170 views
0

我需要幫助在Access 2010中創建VB代碼或表達式,它將從一個字符串中組合數字,其中每個數字集以數字6開頭並且總是9個字符長。字符串的從字符串中提取數字

例子:

  1. 訂單確認#638917872-001偏序/ $ 23.74 RECEIVED

  2. 訂單確認 - 多個訂單 - 訂單確認#639069135-001/$ 297.45 - 訂單確認#639069611 -001/$ 32.08。

我使用VB代碼以刪除所有的字母字符,但只是給我留下了:

  • 6389178720從串1和
  • 639069135001297456390696110013208從字符串2

我唯一關心的是以6開頭的長度爲9個字符的訂單號。任何幫助將不勝感激,我知道有一個更簡單的方法。

+0

它是從6還是從#6開始? – dbasnett

回答

2

VB.NET解決方案:

如果你只是需要從生成的字符串第9號你可以使用String.Substring,即:

Dim numberString as String = "6389178720" 
Dim newString As String = numberString.Substring(0, 9) 
MessageBox.Show(newString) 

顯示638917872

MSDN Link

編輯:

也許y OU會想使用正則表達式 - 這樣的事情也許可以讓你開始:

Private Sub Input() 
    Dim numberString As String = "Order Confirmation # 638917872-001 Partial Order/$23.74 RECEIVED" 
    Dim numberString2 As String = "Order Confirmation - Multiple Orders - Order Confirmation#639069135-001/$297.45 - Order Confirmation#639069611-001/$32.08" 

    GiveMeTheNumbers(numberString) 
    GiveMeTheNumbers(numberString2) 
End Sub 

Function GiveMeTheNumbers(ByVal s As String) As String 
    Dim m As Match = Regex.Match(s, "6\d{8}") 'get 9 digit #s begin w/6 
    Do While m.Success 
     MessageBox.Show(m.Value.ToString) 
     m = m.NextMatch() 
    Loop 
    Return False 
End Function 

結果 - MessageBox1:638917872 MessageBox2:639069135 MessageBox3:639069611

+0

我確實需要字符串1中的前9個數字,但是我還需要字符串2中以6開頭的另一組數字。最終用戶不會適當地格式化主題,並繼續將主題行中的兩個訂單號碼都作爲反對發送兩封單獨的電子郵件。我每個月都會收到1000封這些電子郵件,爲了驗證訂單,我們花了3個星期的時間來清理它們。有沒有一個代碼或表達式,以6開始的數字組提取字符串,然後計算9個字符? –

+0

我正在嘗試使用此代碼,但不斷收到語法錯誤。我正在使用Access 2010 visual basic。我究竟做錯了什麼? –

+0

這是VB.net代碼中每個問題標記的解決方案 - 如果您試圖在Access中使用VBA,它不會起作用,您可能想要查看http://stackoverflow.com/questions/8362848/使用正則表達式替換形式控制值到字符串在msaccess – maxedev

0

您可以使用此功能...在VB.NET測試

Function NumOnly(ByVal s As String) As String 
    sRes = "" 

    For x As Integer = 0 To s.Length - 1   
     If IsNumeric(s.Substring(x, 1)) Then sRes = sRes & s.Substring(x, 1) 
    Next 
    return sRes 
End Function 

小修飾的爲MS-訪問

0

OK,他re是一個VBA解決方案。您需要將Microsoft VBScript正則表達式添加到您的參考中。
這將匹配找到的每9位數字,並返回一個字符串數組,其順序爲#s。

Function GetOrderNum(S As String) As String() 
    Dim oMatches As Object 
    Dim aMatches() As String 
    Dim I As Integer 
    Dim RE As Object 
    Set RE = CreateObject("vbscript.regexp") 
    ReDim aMatches(0) 
    RE.Pattern = "\d{9}" 
    RE.Global = True 
    RE.IgnoreCase = True 
    Set oMatches = RE.Execute(S) 

    If oMatches.Count <> 0 Then 
    ReDim aMatches(oMatches.Count) 
     For I = 0 To oMatches.Count - 1 
     aMatches(I) = oMatches(I) 
     Next I 
    End If 
    GetOrderNum = aMatches 
End Function