Trabajar con UserForms

Buenos días, mi duda es la siguiente:

Tengo una hoja excel con 3 UserForms:

UserForm1

UserForm2

UserForm3

El UserForm1 y UserForm2 se abren desde la hoja de excel usando el CommandBottom1 y CommandBottom2 respectivamente.

Además, el UserForm1 y UserForm2 contienen ambos un Textbox1 y un CommandBottom3 (que abre el UserForm3).

El UserForm3 contiene un Textbox2.

¿Cual es el comando para que al introducir un dato en el Textbox2, me reconozca si esta abierto el UserForm1 o el UserForm2 y me copie ese dato en el Texbox1 del UserForm abierto?

Muchas gracias.

1 respuesta

Respuesta
1

Al inicio de algún módulo (no Userform) definí una variable pública:

Public quien as byte


Desde el Userform1, al llamar al UF3 asignale el valor 1
quien = 1

Userform3.show


Desde el Userform2 al llamar al UF3 asignale el valor 2

quien = 2
Userform3.show

Luego te queda comparar en qué Uf volcar el contenido del textbox<strong style="line-height: 1.5em;">

<strong style="line-height: 1.5em;">If quien = 1 then

Userform1.Textbox1 = textbox2

Else

Userform2.Textbox1 = textbox2

end if

Allí mismo quizás quieras además, activar el Userform que corresponda.

Sdos y no olvides finalizar la consulta.

PD) Todo lo que necesites saber sobre Userfoms y formularios en general lo encontrarás en mis manuales de Formularios.

Muchísimas gracias por responder Elsa, pero siento tener que molestarte otra vez... estoy aprendiendo por mi cuenta VBA con el Excel (lo uso muchísimo en mi trabajo) y las variables Publicas es algo totalmente nuevo para mi. Te comento las macros que he creado:

En un módulo1 puse esto:

Public quien As Byte
Private Sub CommandButton1_Click()
quien = 1
UserForm3.Show
End Sub
Private Sub CommandButton2_Click()
quien = 2
UserForm3.Show
End Sub


Luego en el UserForm1 puse:


Private Sub CommandButton1_Click()
UserForm3.Show
End Sub


En el UserForm2:


Private Sub CommandButton1_Click()
UserForm3.Show
End Sub


Y en el UserForm3:


Private Sub CommandButton1_Click()
If quien = 1 Then
UserForm1.TextBox1 = TextBox2
Else
UserForm2.TextBox1 = TextBox2
End If
End Sub


Los valores que inserto en el TextBox2 (el del UserForm3) siempre me los copia en el TexBox1 del UserForm2.

¿Donde me equivoco?

No entiendo porque colocas rutinas en el módulo, solo mencioné que coloques la variable.

Luego en cada botón que llama al UF3 debes indicar 1 o 2 según qué UF lo llama. Si es el commanbutton1 del UF1 será quien = 1 , sinó será quien = 2.

El hecho de que sea pública te permite mantener su valor al entrar y salir de distintos procesos.

PD) Te recomiendo visitar mi sección de manuales ;)

Cierto, tienes razón, no leí correctamente lo que me pusiste.... ya hice los cambios que me recomendaste y ahora me pasa al contrario:

En un módulo1 puse esto:
    Public quien As Byte

Luego en el UserForm1 puse:        
    Private Sub CommandButton1_Click()
        quien = 1
        UserForm3.Show
    End Sub

En el UserForm2:
    Private Sub CommandButton1_Click()
        quien = 2
        UserForm3.Show
    End Sub

Y en el UserForm3:
    Private Sub CommandButton1_Click()
        If quien = 1 Then
        UserForm1.TextBox1 = TextBox2
        Else
        UserForm2.TextBox1 = TextBox2
        End If
        Unload UserForm3
    End Sub

Los valores que inserto en el TextBox2 (el del UserForm3) siempre me los copia en el TexBox1 del UserForm1 (anteriormente me los copiaba siempre en el UF2).

¿Donde estoy metiendo la pata?

Ahora se lo ve bien... no sé en qué estás fallando ... mejor te envío un modelo. Pedímelo al correo que aparece en mi sitio que dejo al pie o dejame uno tuyo.

La opción de enviarte algo por mail desde tu web no funciona, asi que te dejo mi correo:

[email protected]

Si me envías un privado te paso mi archivo y le hechas un vistazo.

Muchas gracias Elsa y perdona por las molestias.

Ya te escribí. Solo aclaro aquí que el correo si funciona. Si no tienen Outlook deben copiar el mail y pegarlo en el correo que dispongan... así de simple.

Sdos!

Enviado.

Te lo devolví con otra prouesta... Sdos!

Le hecho un vistazo y te comento, muchas gracias Elsa por las molestias.

Tu propuesta funciona perfectamente, pero por desgracia para el trabajo que necesito no me sirve.

De todos modos muchas gracias Elsa, seguiré probando a ver si consigo solucionarlo.

Un saludo.

Si no te vá la nueva propuesta, seguí con la anterior, la que ya tenías. Porque como habrás visto en las imágenes se te devuelve en el Userform correcto según que´botòn presionaste desde la hoja. Pruébalo nuevamente y verás que realmente funciona bien,

Sino enviame imágenes o comentarios en tu libro para que vea cuando te falla.

Sdos

Elsa

Elsa encontré otra combinancion que me funciona con lo que necesito, la posteo aquí por si le sirve a alguien.

En lugar de usar una variable publica, utilizo formatos condiconales:

En el UserForm1 puse:
 Private Sub CommandButton1_Click()

   UserForm3.Show
 End Sub

En el UserForm2:
 Private Sub CommandButton1_Click()

   UserForm3.Show
 End Sub

Y en el UserForm3:
 Private Sub CommandButton1_Click()
   If UserForm1.Visible = True Then
      UserForm1.TextBox1 = TextBox3
   End If
   If UserForm2.Visible = True Then
      UserForm2.TextBox2 = TextBox3
   End If
   Unload UserForm3
 End Sub

Una forma muy simple, pero me funciona. Muchísimas gracias por las molestias, estaré muy pendiente de tu blog y seguiré probando con las variables que es algo nuevo para mi.

Un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas