我有一个字符串数组:
Dim sArray(4) as String
我正在遍历数组中的每个字符串:
for each element in sarray
do_something(element)
next element
do_something
将字符串作为参数
我在将元素作为字符串传递时遇到错误:
ByRef参数不匹配
我应该将元素转换为String还是其他?
Answers:
元素必须是一个变体,因此您不能将其声明为字符串。只要是字符串,您的函数就应该接受一个变体,只要您将其传递给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循环需要一个变量类型或对象。由于将“ 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
lbound
和ubound
是否需要索引i的循环,并与可另一种使用情况是非常有用的foreach
..
我使用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