[RESUELTO] Redim modifica las variables

Discute sobre la aplicación de hojas de cálculo
Responder
novicio
Mensajes: 4
Registrado: Lun May 14, 2018 6:29 pm

[RESUELTO] Redim modifica las variables

Mensaje 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?
Última edición por mauricio el Mar May 15, 2018 2:55 pm, editado 2 veces en total.
Razón: Marcar icono de resuelto
LibreOffice Versi??n: 5.4.6.2 (x64)
Windows 8.1
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

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

Mensaje por mauricio »

No puedo reproducir el error, en el siguiente código, n sigue valiendo 10 despues del Redim

Código: Seleccionar todo

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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
novicio
Mensajes: 4
Registrado: Lun May 14, 2018 6:29 pm

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

Mensaje 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.
LibreOffice Versi??n: 5.4.6.2 (x64)
Windows 8.1
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO] Redim modifica las variables

Mensaje 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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder