[RESUELTO] Redim modifica las variables
Publicado: Lun May 14, 2018 6:53 pm
Me he dado cuenta de que en LibreOffice, programando macros, la instrucción Redim modifica el valor de la variable que se está usando para redimensionar. Adjunto un trozo de código de un programa que estoy haciendo:
...
n = Hoja.getCellByPosition(1,0).Value
MsgBox "n=" & n
Redim A(n,n)
Redim Ifil(n)
Redim Icol(n)
' Introducir datos de la matriz en hoja
MsgBox "Rellenar matriz a partir de B2 y aceptar"
MsgBox "n=" & n
...
Pues bien en este código, al no funcionar el programa inserté las dos instrucciones MsgBox para controlar el valor de n. Y resulta que el valor es distinto antes y después de Redim.
Por ejemplo si al principio es n=3, después de Redim me da n=7. Si borro una de las dos instrucciones sobre Ifil o Icol me da respectivamente antes y después 3/6. Si borro las dos 3/5. Si borro la referida a A me da 3/5. Si borro todas n se mantiene 3/3.
Parece que cada vez que n interviene en un redimensionamiento aumenta +1. Y esto sucede tanto si n es local a la subrutina como si la declaro Global fuera de la misma.
Esto es bastante chungo porque uso posteriormente n en el programa, y claro me descontrola todo porque interviene en varios bucles.
¿Le ha pasado a alguien? ¿Tiene solución? Se me ocurre recargar n después de cada Redim, pero claro es bastante chapucero. Además no sé si al dimensionar la matriz A me la dimensiona n x n o n x n+1 porque no sé si al redimensionar A también aumenta una unidad entre una y otra dimensión.
¿Alguna idea o consejo?
...
n = Hoja.getCellByPosition(1,0).Value
MsgBox "n=" & n
Redim A(n,n)
Redim Ifil(n)
Redim Icol(n)
' Introducir datos de la matriz en hoja
MsgBox "Rellenar matriz a partir de B2 y aceptar"
MsgBox "n=" & n
...
Pues bien en este código, al no funcionar el programa inserté las dos instrucciones MsgBox para controlar el valor de n. Y resulta que el valor es distinto antes y después de Redim.
Por ejemplo si al principio es n=3, después de Redim me da n=7. Si borro una de las dos instrucciones sobre Ifil o Icol me da respectivamente antes y después 3/6. Si borro las dos 3/5. Si borro la referida a A me da 3/5. Si borro todas n se mantiene 3/3.
Parece que cada vez que n interviene en un redimensionamiento aumenta +1. Y esto sucede tanto si n es local a la subrutina como si la declaro Global fuera de la misma.
Esto es bastante chungo porque uso posteriormente n en el programa, y claro me descontrola todo porque interviene en varios bucles.
¿Le ha pasado a alguien? ¿Tiene solución? Se me ocurre recargar n después de cada Redim, pero claro es bastante chapucero. Además no sé si al dimensionar la matriz A me la dimensiona n x n o n x n+1 porque no sé si al redimensionar A también aumenta una unidad entre una y otra dimensión.
¿Alguna idea o consejo?