2011-03-29 75 views
7

這可能是一個超級簡單的問題。但我有這個數組,我需要從無用的零件中去除。但我仍然希望它在一個數組中。VB - 追加到數組?

因此,該陣列是這樣的,當談到在:

For Each s In arrValues 
    s = Split(s, "=") 
    s = s(1) 
Next 

這條弦,所以我只得到FIRSTNAME和:

ArrValues(0) "Firstname=FIRSTNAME" 
ArrValues(1) "Lastname=LASTNAME" 
ArrValues(2) "Username=USERNAME" 
ArrValues(3) "Displayname=DISPLAYNAME" 

然後,我通過這個代碼片段發送此陣等等。 但是,我想再次將每個清理過的字符串發送到數組中。我怎麼做?

+0

您的想法是採取字符串後= =符號?如果是這樣,我建議你使用MID功能。 – 2011-03-29 12:46:10

+2

@Tiago - 爲什麼要使用MID?使用分割功能有什麼問題? – 2011-03-29 13:13:18

+1

@Joel Goodwin使用Split沒有任何問題。但split函數繼承了所有值都聲明爲Variant的事實,因爲它們將被重新定義,即具有一個值「Firstname = FIRSTNAME」的變量將變爲具有兩個值(Firstname,FIRSTNAME)的數組。使用MID功能,我們將避免它。正如我在文章中所說,我不是一個性能專家(確實存在VBA性能專家?),但我認爲,只要有可能,最好避免這種衝突。儘管如此,斯普利特也做了所需的工作。 – 2011-03-29 15:07:39

回答

3

只要你有一個「=」號的所有字符串,此代碼應工作...使用MID函數。我不是性能專家,但我相信MID函數會比SPLIT具有更好的性能(因爲split會重新設置每個值)。

儘管如此,海倫的代碼也可以工作。只是共享此代碼,以顯示我的MID方法:)

Sub MidArray() 

    Dim ArrValues(3) As Variant 
    Dim vValue As Variant 
    Dim iCount As Integer 

    ArrValues(0) = "Firstname=FIRSTNAME" 
    ArrValues(1) = "Lastname=LASTNAME" 
    ArrValues(2) = "Username=USERNAME" 
    ArrValues(3) = "Displayname=DISPLAYNAME" 

    For iCount = LBound(ArrValues) To UBound(ArrValues) 

     ArrValues(iCount) = Mid(ArrValues(iCount), InStr(ArrValues(iCount), "=") + 1) 

    Next iCount 

End Sub 
+1

順便說一句,你的代碼不會寫回數組 - 這就是問題的實質。 – Helen 2011-03-29 14:37:01

+0

Ups ...謝謝海倫!代碼修復了。 – 2011-03-29 14:45:44

+0

謝謝!這實際上和我自己的想法是一樣的:)有輕微的差異。但我確實認爲海倫的建議是我第一次尋找的。但我想我會設置這個作爲答案。主要是因爲她的名聲更高;) – 2011-03-30 05:39:45

7

要寫回數組,您需要使用ArrValues(index) = new_value表示法。因此,您需要使用常規的For循環代替For Each,並通過索引訪問數組元素。這裏是你如何能做到這一點:

For i = LBound(ArrValues) To UBound(ArrValues) 
s = ArrValues(i) 
s = Split(s, "=") 
ArrValues(i) = s(1) 
Next