utilizar multiplicar multiplicación multiplicacion mmult matriciales matrices como calculo excel vba

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