一旦我知道计算机上设置了哪些区域设置,我正在尝试更新充满数值的数组。
我使用了这段代码:
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
语句。
有什么想法吗?
答案 0 :(得分:3)
For Each
循环中的问题是x
是Country
的单独变量(您必须在代码中先前声明它)并且被设置为值{ 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