繁体   English   中英

如何在数组上使用 for each 循环?

[英]How can I use a for each loop on an array?

我有一个字符串数组:

Dim sArray(4) as String

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

for each element in sarray
  do_something(element)
next element

do_something接受一个字符串作为参数

将元素作为字符串传递时出现错误:

ByRef 参数不匹配

我应该将元素转换为字符串还是什么?

元素需要是一个变体,所以你不能将它声明为一个字符串。 如果你的函数是一个字符串,你的函数应该接受一个变体,只要你通过 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循环结构更多的是围绕集合对象设计的。 For..Each 循环需要变体类型或对象。 由于您的“元素”变量被输入为变体,因此您的“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

我像 Fink 建议的那样使用计数器变量。 如果你想要 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM