簡體   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