2017-02-01 4 views
4

Wie würde ich das n-te Element aus einem VBA-String-Array extrahieren?Nth-Element aus VBA-String-Array abrufen

Ich habe eine Zeichenfolge, wie: TEST - 2017/01/20 = Invoice

ich die 2. und 3. Elemente so knapp wie möglich extrahieren möchten. Ich habe versucht, etwas Javascripty wie diese, was nicht funktioniert, so muss es eine VBA Weg:

Dim Report As String 
Dim CurrLine As String 
Dim CurrDate As String 
Dim CurrTask As String 

CurrLine = "TEST - 2017/01/20 = Invoice" 
CurrDate = Trim(Split(CurrLine, '-')[1]) 
CurrTask = Trim(Split(CurrLine, '=')[1]) 
Report = Report & CHR(34) & CurrDate & CHR(34) & "," & CHR(34) & CurrTask & CHR(34) 

//result: "2017/01/20","Invoice" 
+0

, das wie ein ziemlich ineffizienter Weg scheint CSV zu erzeugen wegen der vielen String Verkettungen , wenn es anfängt zu werden Zu langsam können Sie die Strings "Join" und ersetzen Sie alle durch einzelne Regex. – Slai

Antwort

4

eine mögliche Lösung

Dim Report As String 
Dim CurrLine As String 
Dim CurrDate As String 
Dim CurrTask As String, St 


CurrLine = "TEST - 2017/01/20 = Invoice" 
St=Split(replace(CurrLine, "=","-"),"-") 
CurrDate = St(1) 
CurrTask = St(2) 
Report = Report & CHR(34) & CurrDate & CHR(34) & "," & CHR(34) & CurrTask & CHR(34) //result: "2017/01/20","Invoice" 
+0

Soll ich effizient arbeiten, kann ich das auch tun: 'Dim Bericht als String, CurrLine, CurrDate, CurrTask, St'? * Das Ziel ist es, so viel wie möglich auf einer einzigen Zeile zu tun * – crashwap

+1

absolut, aber currline und folgende haben Datentyp Variante, nicht String – h2so4

+0

So kann ich das 'as String' Bit weglassen und einfach' Dim Report, CurrLine , CurrDate, CurrTask, St' und der Code wird immer noch gut funktionieren ..? – crashwap

3

ich verwendet habe, würde die Lösung von @ h2so4 mit Ersatz (vor allem, wenn es sich um eine berufsbezogene Aufgabe), aber wenn Sie ein Fan von „fancy“ Codierung sind, funktioniert dies auch:

Option Explicit 

Public Sub Test() 

    Dim strtest As String 

    strtest = "Test - 2017/1/20 = Invoice" 

    Debug.Print Trim(Split(strtest, "-")(1)) 
    Debug.Print Trim(Split(strtest, "=")(1)) 
    Debug.Print Trim(Split(Trim(Split(strtest, "-")(1)), "=")(0)) 

End Sub