J'ai un tableau de chaînes:
Dim sArray(4) as String
Je vais à travers chaque chaîne dans le tableau:
for each element in sarray
do_something(element)
next element
do_something
prend une chaîne en tant que paramètre
Je reçois une erreur en passant l'élément en tant que chaîne:
ByRef Argument Mismatch
Devrais-je convertir l'élément en chaîne ou quelque chose?
L'élément doit être une variante, vous ne pouvez donc pas le déclarer en tant que chaîne. Votre fonction devrait accepter une variante si c'est une chaîne si vous la passez 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
L'autre option consiste à convertir la variante en chaîne avant de la transmettre.
do_something CStr(element)
Une structure de boucle pour chaque boucle est davantage conçue autour de l'objet de collection. Une boucle For..Each nécessite un type ou un objet variant. Puisque votre variable "element" est en train d'être typée en tant que variante, votre fonction "do_something" devra accepter un type variant, ou vous pouvez modifier votre boucle comme suit:
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
J'utilise la variable compteur comme le suggère Fink. Si vous voulez For Each et passer ByRef (ce qui peut être plus efficace pour les longues chaînes), vous devez convertir votre élément en chaîne à l'aide de 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
qu'en est-il de cette simple fonction 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