VBA Excel activar un UserForm desde otro?
Resuelto
pijaku
Mensajes publicados
13513
Fecha de registro
Estado
Moderador
Última intervención
-
pijaku Mensajes publicados 13513 Fecha de registro Estado Moderador Última intervención -
pijaku Mensajes publicados 13513 Fecha de registro Estado Moderador Última intervención -
Bonjour,
Me baso con las propiedades "modales" de dos userforms... ¡Grrr!!!
El principio de lo que quiero lograr:
Tengo dos Userform. Cuando ejecuto el archivo, los 2 userforms se muestran uno al lado del otro. Hasta ahora sin problema!
Con un botón en uno, deseo activar el segundo, y viceversa, manteniendo ambos visibles.
Por supuesto, Hide habría sido muy útil, pero realmente quiero mantener los 2 userform visibles en la pantalla.
¿Es posible?
Si es así, ¿cómo?
Muchas gracias por sus aportes y/o consejos atentos...
Excel 2003 (poco importante porque >97, pero bueno lo pongo de todos modos...)
--
Atentamente,
Franck P
Me baso con las propiedades "modales" de dos userforms... ¡Grrr!!!
El principio de lo que quiero lograr:
Tengo dos Userform. Cuando ejecuto el archivo, los 2 userforms se muestran uno al lado del otro. Hasta ahora sin problema!
Con un botón en uno, deseo activar el segundo, y viceversa, manteniendo ambos visibles.
Por supuesto, Hide habría sido muy útil, pero realmente quiero mantener los 2 userform visibles en la pantalla.
¿Es posible?
Si es así, ¿cómo?
Muchas gracias por sus aportes y/o consejos atentos...
Excel 2003 (poco importante porque >97, pero bueno lo pongo de todos modos...)
--
Atentamente,
Franck P
1 respuesta
-
Buenas noches,
No sé si te servirá, pero puedes poner tus userforms en modo no modal:UserForm1.Show 0 UserForm2.Show 0
Bastará con hacer clic en el formulario de usuario que elijas para activarlo.
Esto también te permite trabajar en tu hoja de cálculo sin cerrar tus userforms
Buena noche
--
"Para encontrar una solución a sus problemas, hay que esforzarse."-
Hola acuarela y gracias. En realidad, conozco la propiedad modal de los USF. Sin embargo, lo que deseo hacer es una activación automática del USF2 desde el USF1 sin que el usuario tenga que intervenir... Algo como: En el USF1: Private Sub CommandButton1_Click() 'Mi código de procedimiento aquí UserForm2.Activate End Sub Private Sub UserForm_Activate() MsgBox "Coucou el USF1 está activado" End Sub En el USF2: Private Sub UserForm_Activate() MsgBox "Coucou el USF2 está activado" End Sub Private Sub CommandButton1_Click() 'Mi código de procedimiento aquí UserForm1.Activate End Sub Entonces probé reemplazar: UserForm1.Activate por: UserForm1.Show 1, userForm1.Show 0, pero sigo obteniendo el mensaje de error: "no puedes mostrar un USF en modo modal blah blah..." Bah, si no es posible, ocultaré uno de los dos con Hide...
-
Hola, Para mí funciona si pongo: En el USF1: Private Sub CommandButton1_Click() 'Mi código de procedimiento aquí Load UserForm2 UserForm2.Show 0 End Sub Private Sub UserForm_Activate() MsgBox "Coucou l'USF1 est bien activé" End Sub En el USF2: Private Sub UserForm_Activate() MsgBox "Coucou l'USF2 est bien activé" End Sub Private Sub CommandButton1_Click() 'Mi código de procedimiento aquí Load UserForm1 UserForm1.Show 0 End Sub Y para lanzar la visualización de los 2 UserForms: Sub Auto_Open() Load UserForm1 UserForm1.Show 0 Load UserForm2 UserForm2.Show 0 End Sub
-
Gracias nuevamente por interesarte en mi problema. El tema de "Load" es que recarga mi Usf en la memoria. O en mi procedimiento Initialise, vuelvo a cero ciertas variables públicas. Por eso, temo que Load me ponga a cero sistemáticamente variables que evolucionan a lo largo del uso de mis userforms. Así que al final encontré una solución alternativa. La comparto aquí, podría servir... 1- Reemplazar las llamadas de los procedimientos: Private Sub UserForm_Activate() por: Sub UserForm1_Activate() (reemplaza UserForm1 por el nombre de tu UserForm) 2- Llamarlas desde el otro Userform con: CallByName UserForm1, "UserForm1_Activate", VbMethod 3- En cada userform colocar un textbox (que haremos invisible) Entonces el código global queda: En el USF1: Private Sub CommandButton1_Click() CallByName UserForm2, "UserForm2_Activate", VbMethod With UserForm2.TextBox1 .Visible = True .SetFocus .Visible = False End With End Sub Sub UserForm1_Activate() MsgBox "USF 1 activado" End Sub En el USF2: Private Sub CommandButton1_Click() CallByName UserForm1, "UserForm1_Activate", VbMethod With UserForm1.TextBox1 .Visible = True .SetFocus .Visible = False End With End Sub Sub UserForm2_Activate() MsgBox "USF 2 activado" End Sub Adjunto un libro de trabajo de ejemplo ¿Podría ser una astucia CCM, no? Que tengas un buen día y gracias de nuevo.
-
-
-