excel - multiplicar - ¿Cómo puedo usar a para cada ciclo en una matriz?
matrices multiplicación (4)
Tengo una matriz de cadenas:
Dim sArray(4) as String
Estoy repasando cada cadena del conjunto:
for each element in sarray
do_something(element)
next element
do_something
toma una cadena como parámetro
Recibo un error al pasar el elemento como una cadena:
Por diferencia de argumento de ReRe
¿Debo convertir el elemento a una cadena o algo así?
¿Qué pasa con esta simple función en Array?
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
A para cada estructura de bucle está más diseñado alrededor del objeto de colección. A For..Cada bucle requiere un tipo de variante u objeto. Dado que su variable "elemento" se está escribiendo como una variante, su función "do_something" necesitará aceptar un tipo de variante, o puede modificar su ciclo a algo como esto:
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
Elemento necesita ser una variante, por lo que no puede declararlo como una cadena. Su función debería aceptar una variante si es una cadena aunque siempre que la pase 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
La otra opción es convertir la variante en una cadena antes de pasarla.
do_something CStr(element)
Uso la variable de contador como sugiere Fink. Si quieres For Each y para pasar ByRef (que puede ser más eficiente para cadenas largas) tienes que convertir tu elemento como una cadena usando 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