2011-03-29 68 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