我如何使用一个数组的每个循环?
我有一个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