Abrir formulario desde un cuadro combinado

Mi pregunta es al siguiente, me surge la idea de abrir un formulario a través de un cuadro combinado, de manera que he creado una tabla con IdForm y NombreFormulario

Después de esto en un formulario he creado el combo y en el evento al click ya he puesto de todo, pero no funciona, lo consigo con los informes poniendo

DoCmd. Open Report Me. Cuadrocombinado, column(1), acpreview

Pero no lo consigo con los formulario, estoy poniendo

DoCmd.Open Form Me.Cuadrocombinado.column8!), acViewNormal

Y más cosas que he puesto que no funcionan, si hay alguien que me eche un cable que sepa que tiene las gracias garantizadas, sólo lo quiero para aprender y cada día surge algo nuevo.

1 respuesta

Respuesta
1

Prueba a poner esto en tu código:

Dim miID as integer

Dim miForm as string

miID = Me.NombredelCuadroCombinado.value

miForm = DLookup("NombreFormulario",""NombredetuTabladeFormularios","[idForm]=" & miID)

DoCmd. OpenForm miForm

Tienes que sustituir lo que está en negrita por los nombres que tú tengas.

Otra forma de hacerlo, sin necesidad de una tabla con los nombres de los formularios sería esta:

Click Derecho en el cuadro combinado, Propiedades
->En la pestaña Otras, en nombre le pones: cboForms
-> En la pestaña Datos, en Tipo de rigen de la Fila, le pones Lista de Valores
->En la pestaña Eventos, en el evento Al Entrar, le das a generar código, y escribes lo siguiente, entre las lineas Private Sub ... y End Sub:
Dim miOrigen As String
Dim miForm As Object
'Inicializamos la variable miOrigen como una cadena vacía
miOrigen = ""
'Recorremos la colección "Informes"
For Each miForm In CurrentProject.AllForms
miOrigen = miOrigen & miForm.Name & ";"
Next miForm
'Quitamos el último ; de la lista
miOrigen = Left(miOrigen, Len(miOrigen) - 1)
With Me.cboForms
.LimitToList = True
.RowSource = miOrigen
End With

Con eso, ya tienes listados en el desplegable todos tus formularios. Para que
te lo muestre, o bien lo haces por medio de un botón, o que lo haga al
seleccionarlo. Te explico las dos opciones y eliges la que más te
convenga.

1/ Abrir el formulario directamente al seleccionarlo: En la
pestaña Eventos del cuadro combinado, seleccionas evento Después de
Actualizar, le das a los (...), generador de código, y escribes entre
las lineas Private Sub ... y End Sub:
On Error GoTo sol_err
DoCmd.OpenForm Me.cboForms.Value, acPreview, , , acDialog
cboForms = ""
Salida:
Exit Sub
sol_err:
MsgBox Err.Description
Resume Salida

2/ Para abrir el formulario mediante un botón, colocas un botón de comando
junto al cuadro combinado, sacas sus propiedades, en la pestaña Otras,
le pones de nombre cmdFormulario, y en la pestaña Eventos, evento Al Hacer
Click, le das a los (...) Generador de código y le pones el mismo código
que la opción de arriba.

Una aclaración, la línea cboForms="", lo que hace es poner en blanco el cuadro combinado, una vez que te abre el formulario.

Hola de nuevo y sobre todo gracias porque te lo has currado bien, el problema es que yo no termino de interpretarlo correctamente

En el primer ejemplo organizo bien las tablas pero no consigo ejecutarlo correctamente, me da el error 2001 al intentarlo abrir.

El segundo ejemplo si que consigo seleccionar formulario en el combo, aunque no se porque parece que selecciona al azar los formularios

En el tercer ejemplo se realiza la selección en el formulario pero como la selección la ha echo a su antojo. Creo que selecciona un subformulario t al estar asociado abre el formulario pero en el combo me sale el nombre de subformulario no el del formulario.

Que rollo te estoy soltando!!!

Lo que he conseguido es abrir los formularios a través del cuadro de lista con

DoCmd.OpenForm Me.NombreFormulario,column(1),acnormal,acedit

Bueno, esto me está sirviendo de mucho porque además de acostarme a las 2 de la mañana todos estos días duermo más contento por aprender cosas nuevas

Si me puedes aportar algo más me lo comunicas y si no te puntuaré.

Muy agradecido

Saludos de nuevo

Lo del primer ejemplo sin ver tu BD no te puedo dar una solución más concreta. Puedo aventurar que igual es porque el identificador es texto y no numérico (en mi código lo supuse numérico).

En el Segundo y Tercer ejemplo, Access le asigna un número de índice a cada formulario, y los ordena por ese índice, que no tiene por qué coincidir con el orden alfabético (esto es algo que no conseguí cambiar, y a mí también me interesaba poder ordenarlos...)

Lo del tercer ejemplo del formulario y subformulario no acabo de entender a qué te refieres.

Tu opción de: DoCmd. OpenForm Me.NombreFormulario, column(1) también es perfectamente válida, e incluso más sencilla, y si te funciona, pues genial!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas