我如何使用一个数组的每个循环?

我有一个string数组:

Dim sArray(4) as String 

我正在经历数组中的每个string:

 for each element in sarray do_something(element) next element 

do_something以一个string作为参数

我得到一个错误作为一个string传递元素:

ByRef参数不匹配

我应该将元素转换为一个string或什么的?

元素需要是一个变体,所以你不能声明它是一个string。 你的函数应该接受一个变体,如果它是一个string,只要你通过它的ByVal。

 Public Sub example() Dim sArray(4) As string Dim element As variant For Each element In sArray do_something (element) Next element End Sub Sub do_something(ByVal e As String) End Sub 

另一个选项是在传递变体之前将变体转换为string。

  do_something CStr(element) 

每个循环结构的A更多地围绕集合对象devise。 For..Each循环需要变体types或对象。 由于你的“元素”variables被作为一个变种input,你的“do_something”函数将需要接受变体types,或者你可以修改你的循环如下所示:

 Public Sub Example() Dim sArray(4) As String Dim i As Long For i = LBound(sArray) To UBound(sArray) do_something sArray(i) Next i End Sub 

我使用Finkbuild议的计数器variables。 如果你想要For Each并传递ByRef(对于长string可以更有效),你必须使用CStr将你的元素转换为string

 Sub Example() Dim vItm As Variant Dim aStrings(1 To 4) As String aStrings(1) = "one": aStrings(2) = "two": aStrings(3) = "three": aStrings(4) = "four" For Each vItm In aStrings do_something CStr(vItm) Next vItm End Sub Function do_something(ByRef sInput As String) Debug.Print sInput End Function 

这个简单的inArray函数呢?

 Function isInArray(ByVal stringToBeFound As String, ByVal arr As Variant) As Boolean For Each element In arr If element = stringToBeFound Then isInArray = True Exit Function End If Next element End Function