Excel - ¿Se puede abrir un Form desde otro llamándolo desde una lista desplegable?

Estoy buscando la manera de abrir una serie de formularios (no a la vez) desde un Form principal que sirve de Índice.

En la lista tendría los nombre de formularios y seleccionando uno y pulsando abrir, se abriera.

El problema lo estoy teniendo a la hora de usar el nombre del formulario seleccionado en la lista, no consigo que funcione porque el tipo de variable que estoy usando no es el correcto y siempre me sale el error "No coinciden los tipos"

Entiendo que el problema está en cómo denomino el nombre extraído de la lista.

En VBA la función que uso es la siguiente:

Private Sub lista_Click()
  Load lista.text
  ' Aquí iría lista.text.show, pero claro, es totalmente incorrecto.
End sub

¿Podría alguien arrojarme algo de luz sobre el tipo de variable o como tratar de usarla como objeto?

3 Respuestas

Respuesta
1

Esto te puede ayudar

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Set a = UserForm1.ListBox1
fila = UserForm1.ListBox1.ListIndex
formu = a.List(fila)
UserForms.Add(formu).Show
End Sub

También puedes hacerlo con un Select case algo así

Select case formu

case "userform1"

userform1.show

case "userform2"

userform2.show

case "userform3"

userform3.show

End select

Fíjate esta otra puede ser de utilidad

https://youtu.be/Q1sSsvvsXM0

Visita https://programarexcel.com

Respuesta
1

En el formulario principal donde quieres llamarlos tienes que poner los items que llamaran a cada formulario

Private Sub UserForm_Initialize()
ListBox1. AddItem "Form1"
ListBox1. AddItem "Form2"
ListBox1. AddItem "Form3"
ListBox1. AddItem "Form4"
ListBox1. AddItem "Form5"
End Sub

 ( si ya tienes hecha esta parte omite este paso )

Luego de hecho esto, haz doble click en el Botton para ir al código y dentro del mismo pega esto

Private Sub CommandButton1_Click()
If Me.ListBox1.ListIndex = 0 Then
    Unload Me
    UserForm1.Show
    Exit Sub
End If
If Me.ListBox1.ListIndex = 1 Then
    Unload Me
    UserForm2.Show
    Exit Sub
End If
If Me.ListBox1.ListIndex = 2 Then
    Unload Me
    UserForm3.Show
    Exit Sub
End If
If Me.ListBox1.ListIndex = 3 Then
    Unload Me
    UserForm4.Show
    Exit Sub
End If
If Me.ListBox1.ListIndex = 4 Then
    Unload Me
    UserForm5.Show
    Exit Sub
End If
End Sub

No olvides cambiar el "UserForm1,2,3,4,5" por los nombres de tus formularios

También puedes hacerlo haciendo click en el mismo listado para ello en lugar de poner un botón pega el código dentro del ListBox

Muchas gracias, obvio era, y no caí. La idea te la pillo ahora, pero me quedo con la duda de saber si se puede hacer directamente. Tomando el texto desde la lista y usándolo como objeto para abrir directamente el Form.

Aunque por el momento, me quedo con tu idea mientras tanto. Muchísimas gracias por responderme.

Saludos,

¿Lo qué tu quieres es abrir los formularios desde una lista desplegable en la hoja?

Haz de la siguiente manera

Crea la lista desplegable con los nombres que tu quieras

En mi caso este ejemplo use Form1, Form 2, Form3, Form4, Form5

Entra al modulo de la hoja en la cual lo vayas a usar

Dentro de la misma pega el siguiente código

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range
Set rng = Range("H25")
If rng = "Form1" Then
 Call xFormx1
End If
If rng = "Form2" Then
 Call xFormx2
End If
If rng = "Form3" Then
 Call xFormx3
End If
If rng = "Form4" Then
 Call xFormx4
End If
If rng = "Form5" Then
 Call xFormx5
End If
End Sub

Despues crea un modulo y dentro del mismo pega este codigo

Sub xFormx1()
UserForm1.Show
End Sub
Sub xFormx2()
UserForm2.Show
End Sub
Sub xFormx3()
UserForm3.Show
End Sub
Sub xFormx4()
UserForm4.Show
End Sub
Sub xFormx5()
UserForm5.Show
End Sub

en cada formulario, en el boton salir pon este codigo

Private Sub CommandButton1_Click()
Unload Me
Range("H25").FormulaR1C1 = "NINGUNO"
End Sub

La celda "H25" cambiala por la celda que vas a usar para poner la lista desplegable

Es para que se cierre el formulario y cambie el contenido de la celda para que no se siga ejecutando

Espero te sea de utilidad, dame una buena valoración si era lo que buscabas =)

Respuesta
1

Reconozco que no tengo ni idea de Excel, pero si donde te aparecen los nombres de los formularios, es un cuadro de lista, al que llamaré Lista0, puedes asignarle una macro al evento Después de actualizar y poner, simplemente

DoCmd.OpenForm "" & Me.Lista0 & ""

Por ejemplo

Si pulso Clientes

El código es exactamente el que te he puesto arriba

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas