Página 1 de 1

[RESUELTO] Redim modifica las variables

NotaPublicado: Lun May 14, 2018 6:53 pm
por novicio
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?

Re: LibreOffice-Macros: Redim modifica las variables de dime

NotaPublicado: Lun May 14, 2018 10:20 pm
por mauricio
No puedo reproducir el error, en el siguiente código, n sigue valiendo 10 despues del Redim
Código: Seleccionar todo   Expandir vistaContraer vista
Dim n As Integer
Dim m(5)

   n = 10
   MsgBox n
   MsgBox UBound(m)
      
   ReDim m(n)
   MsgBox n
   MsgBox UBound(m)   

Asegurate de no estar modificando el valor de n en algún otro proceso, de todos modos es mala idea usar los mismos nombres de variables para cosas diferentes.

Saludos

Re: LibreOffice-Macros: Redim modifica las variables de dime

NotaPublicado: Mar May 15, 2018 7:06 am
por novicio
La verdad no lo entiendo. Efectivamente tu código funciona bien. Pero no sólo eso sino que el código que ayer no me funcionaba, hoy sí funciona correctamente. Ahora que lo recuerdo, ayer mientras trabajaba hubo un momento en que se atascó el ordenador y salió momentaneamente en el título de la pestaña el "Libreoffice (no responde)" pero se repuso y siguió funcionando. Igual fue eso. El caso es que hoy el código si fuciona correctamente y n no varía después de Redim. En fin, misterios de la informática.
NOTA: no es que use n para varias cosas, n es el orden de una matriz; es un programa para invertir matrices -por el método de Gauss-Jordan- y hay que extender varios bucles sobre filas y columnas (n). Por lo demás el programa ya funciona.
Gracias por tu interés.
Un saludo.

Re: [RESUELTO] Redim modifica las variables

NotaPublicado: Mar May 15, 2018 2:59 pm
por mauricio
En mi experiencia, reitero lo de "mi experiencia", todas, todas las implementaciones de Basic son algo "incompletas", por decirlo de alguna manera...

Usa Python.

Saludos