VBA - 使用For Each语句更新数组中的值

时间:2015-05-28 09:03:49

标签: arrays vba foreach

一旦我知道计算机上设置了哪些区域设置,我正在尝试更新充满数值的数组。

我使用了这段代码:

If Application.International(xlCountrySetting) <> 33 Then
    For Each x In Country
        x = Replace(x, ",", ".")
    Next x
Else
    For Each x In Country
        x = Replace(x, ".", ",")
    Next x
End If

当我调试时,我发现 x已被更改,但稍后在代码中,数组中的值未被修改。< / p>

我知道我可以使用For i = LBound(Country,1) to UBound(Country,1),但我想知道是否有方法可以使用For Each语句

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

For Each循环中的问题是xCountry的单独变量(您必须在代码中先前声明它)并且被设置为值{ Country的当前元素;它没有共享相同的内存,即它不是&#34;通过ref&#34;。

因此,当您替换x中的字符时,您只需更改x而不更改Country中的元素。

您可以通过将Country添加到Watch窗口来看到这一点,如果您逐步执行代码,您将看到在遍历循环时,Country的元素不会更改。

但是,当您使用For循环并使用Country(i) = Replace(Country(i), ".", ",")时,您正在修改Country元素,因此值会发生变化。

答案 1 :(得分:0)

我有类似的问题。我需要在遍历时更改VBA中Collection的值。

尝试使用for循环修改Collection会导致错误。然后就像R3uK的问题所示,当我在一个foreach循环中修改Collection时,Collection中的值没有改变。

我所做的是使用另一个Collection变量作为最终答案。因此,我将在循环时将每个值添加到新的Collection中。然后,我收集了想要的数据。

因此,如果“国家/地区”是一个馆藏,我的VBA答案将如下所示:

Dim Country As New Collection
Dim finalCountry As New Collection

If Application.International(xlCountrySetting) <> 33 Then
    For Each x In Country
        x = Replace(x, ",", ".")
        finalCountry.Add x
    Next x
Else
    For Each x In Country
        x = Replace(x, ".", ",")
        finalCountry.Add x
    Next x
End If