# Error '1004' al aplicar WorksheetFunction.Mmult



## sanraso (Apr 28, 2007)

Al correr las siguientes líneas:

```
Dim MatT
ReDim MatT(1 To NumEc)
MatT = Application.WorksheetFunction.MMult(MatInvA, matB)
```
Me da el error siguiente en dicha línea:
 ...error '1004' en tiempo de ejecución.
No se puede obtener la propiedad MMult de la clase WorksheetFunction.

NumEc = 36

Una inspeccón parando en dicha línea indica que MatT está vacío y es del tipo Variant/Variant (1 to 38),  MatInvA es del tipo Variant/Variant (1 to 38, 1 to 38), y que matB es tipo Variant/Variant(1 to 38) y no está vacío.

Alguien sabe que quiere decir el código del error dado, y cual puede ser el problema?


----------



## galileogali (Apr 29, 2007)

No puede haber posiciones vacias...Reemplaza por 0 esas posiciones si pretendes que ese sea el valor
El numero de columnas de la Primera Matriz tiene que ser igual al de filas de la segunda matriz.
La Matriz Resultado tiene que tener el numero de filas de la Primera y el de columnas de la segunda
de no cumplirse todo: Error!!

GALILEOGALI


----------



## sanraso (Apr 29, 2007)

Previo a la multiplicación:
matB no está vacío y es de 38 elementos
MatInvA tampoco está vacío y es de 38x38
MatT (previo a la multiplacion) es de 38 elementos, variant y vacío.
Quieres decir que haga MatT(j)=0 previo a la multiplicación?


----------



## galileogali (Apr 29, 2007)

La matriz para los resultados bien puede estar Vacia.
Pero sigo insistiendo con las dimensiones:
tienen que tener la Matriz resultado: el mismo Numero de filas del Primer Factor y l Numero de Columnas del Segundo Factor.

Por otra parte :
la Cantidad de columnas del Primer Factor tiene que ser igual al numero de filas del Segundo Factor.

Las restricciones a Posiciones Vacias son para los Factores no para el resultado del producto


----------



## sanraso (Apr 29, 2007)

Entiendo lo que dices, pero acaso eso no se está cumpliendo en este caso?
Como dije antes según la inspección parando en la línea de la multiplicac., es decir antes de realizarla, las dimensiones según veo yo concuerdan con lo anterior, ya que
matriz resultado sería de (1 a 38)
MatInvA, primer factor de la multiplicac. sería (1 a 38, 1 a 38)
MatB, segundo factor, sería (1 a 38), por lo cual:
MatT(38)=MatInvA(38x38).MatB(38).

Estoy en lo correcto o no?


----------



## galileogali (Apr 29, 2007)

Ejemplo:
(cambié 38 por 4, para reducir datos)

En hoja excel:
RNG1 es "A1:D4", CON DATOS incluido "0", PERO no-vacios
RNG3 es "F1:F4"


```
Option Base 1
Sub PROBAR_Mmult()
Dim ARR1 As Variant, ARR2 As Variant, ArrResult As Variant

ARR1 = Range("rng1")
ARR2 = Range("Rng3")
ArrResult = Application.WorksheetFunction.MMult(ARR1, ARR2)
Range("f7:f10").Value = ArrResult


End Sub
```


Esto funciona y no arroja ningun error.


----------



## Greg Truby (Apr 30, 2007)

Para mi ambos un _variant_ no definido como matriz tanto como un _variant_ sí declarado como matriz me sirven
	
	
	
	
	
	



```
Sub TestMMult()
    '// Test5x5 = range("A1:E5")
    '// Text1x5 = range("A11:A15")
    
    Dim a, v, fn As WorksheetFunction
    ReDim a(1 To 5)
    
    Set fn = Application.WorksheetFunction
    v = fn.MMult([Test5x5], [Test1x5])
    
    Range("F11:F15") = v
    
    a = fn.MMult([Test5x5], [Test1x5])
    
    Range("H11:H15") = a
End Sub
```

Noté esto en su primer mensaje...





> ...NumEc = 36...


 No sé si eso fue un error al momento de teclar el mensaje y _NumEc_ actualmente vale 38 o si esto puede ser su problema.
<hr />
¡Hola, Gali!  Me gusta su foto. ¿Cerca de Urdampilleta?


----------



## Greg Truby (Apr 30, 2007)

Creo que Gali ya encontró la parte clave, la dimensión de los variants no import.  A pesar de dimensionar a de 1 a 4, esto siempre funciona...
	
	
	
	
	
	



```
Sub TestMMult()
    '// Test5x5 = range("A1:E5")
    '// Text1x5 = range("A11:A15")
    
    Dim a, v, fn As WorksheetFunction
    ReDim a(1 To 4)
    
    Set fn = Application.WorksheetFunction
    v = fn.MMult([Test5x5], [Test1x5])
    
    Range("F11:F15") = v
    
    a = fn.MMult([Test5x5], [Test1x5])
    
    Range("H11:H15") = a
End Sub
```

Pero si borro una celda en Test5x5 o Test1x5, entonces sí me da el mismo error -- 1004.  Mejor revise MatInvA y matB otra vez. Parece que el problema se encuentra dentro de los valores en los Inputs.


----------



## galileogali (Apr 30, 2007)

Greg: Lamentablemente el paisaje cercano es la Pampa Humeda, una llanura plana donde las alturas máximas son las de las innumerables vacas que la pueblan. La imagen es de otro sitio de mi país, más turístico, por cierto: Bariloche, aunque.......en los hoteles y restaurantes de los mejores lugares turísticos los visitantes extranjeros elogian las carnes que producimos en esta zona bastante más aburrida....


GALI


----------

