Definir variable desde sub de hoja

En un libro de Excel tengo 3 hojas. La primera contiene los datos de los afiliados a una entidad, la segunda y tercera, el control de las cuotas abonadas por cada uno en 2017 y 2018.

Quiero que al situar el cursor en la última columna de la hoja1, se active el procedimiento Worksheet_SelectionChange, un InputBox pregunta que año, y se abre un formulario que muestra las cuotas de ese afiliado en ese año.

El problema que tengo es que las dos variables que se generan en el SelectionChange, posición=Target.Row y año=InputBox("......"), no se conservan para trabajar con el codigo en el formulario. No puedo definir si los datos a mostrar son los de la Hoja2 o Hoja3, según la variable año, ni de que afiliado mostrar las cuotas según la posición.

No se como definir las variables para poder usarlas en ambos procedimientos.

1 respuesta

Respuesta
1

Debes declarar las variables que vas a utilizar como Públicas al inicio de cualquier módulo. Ajusta al tipo de variable que asumí String.

Luego, antes del INPUTbox, limpia las variables y colocale las nuevas.

El formulario debiera evaluar si en esas variables hay algún dato (por si dejas el Inputbox vacío, aunque en ese caso ni debiera llamar al UF.

Sdos. Si el tema queda resuelto no olvides valorar la respuesta.

La cuestión es que las variables no están en un módulo. Se generan en el procedimiento Worksheet_SelectionChange de la hoja1, y aunque ya había probado lo que tu me comentas en la declaración de variables previa a ese procedimiento, no se conservan los valores al ejecutarse el código del userform.

No señor, no es así como lo mencionas.

Una variable que se alimenta en el evento Change de la hoja bien puede luego utilizarse en un Userform, en otro evento o incluso en una subrutina de un módulo... siempre y cuando fueron declaradas al inicio de un MODULO... no dentro del worksheet_change.

Observa la imagen que te envié.

Si el evento change envía datos a esas variables, cuando abras el userform las podés enviar a tus controles o incluso de allí a otra hoja. Mientras el libro esté abierto y no se borraron esas variables desde algún otro evento, estarán disponibles.

Si volvés a ejecutar otro change se guardarán las nuevas.

Probalo nuevamente y si aún tenés alguna dificultad deja escrito aquí las macros de la hoja.

Sdos!

A ver si estas aclaraciones te ayudan.

En la hoja tendrás la macro del SelectionChange. En mi ejemplo utilizo la col E .

Lo que hará esa macro es solicitarte el año, guardar la fila del registro, abrir el formulario y mostrar esos campos en unos controles... luego sabrás cómo manejar esos datos.

Esos datos se guardan en variables públicas declaradas en un Módulo:

Y la macro del UF es esta:

Private Sub UserForm_Initialize()
'se muestran en los 2 controles las variables guardadas
TextBox1 = Var_anio
TextBox2 = Var_fila
End Sub

¡Gracias! Fantástica aclaración con tu segundo post con la líneas de código de cada procedimiento. Con las variables accesibles, el resto del userform ya coge los datos donde corresponde.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas