如何在数组中使用 for 每个循环?

我有一个字符串数组:

Dim sArray(4) as String

我将遍历数组中的每个字符串:

for each element in sarray
do_something(element)
next element

do_something接受字符串作为参数

我得到一个错误,将元素作为 String 传递:

参数不匹配

我是否应该将元素转换为 String 或其他形式?

471204 次浏览

For 每个循环结构更多地是围绕集合对象设计的。A 代表。.每个循环都需要一个变量类型或对象。因为你的“ element”变量是作为一个变量被输入的,所以你的“ do _ something”函数需要接受一个变量类型,或者你可以把你的循环修改成这样:

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

元素必须是变量,因此不能将其声明为字符串。如果函数是字符串,那么它应该接受一个变量,只要你传递给它 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

另一种选择是在传递变量之前将其转换为字符串。

  do_something CStr(element)

我像芬克建议的那样使用计数器变量。如果想要 For Each 并传递 ByRef (对于长字符串来说,这样更有效) ,那么必须使用 CStr 将元素强制转换为字符串

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(ByRef stringToBeFound As String, ByRef arr As Variant) As Boolean
For Each element In arr
If element = stringToBeFound Then
isInArray = True
Exit Function
End If
Next element
End Function

如果这种情况下可以接受其他选择,我宁愿建议 UBound:

For i = 1 to UBound(nameofthearray)
your code here
next i