Access VBA: Abrir distintas tablas en un subformulario, según se seleccionen

Tengo en Access en un formulario, un cuadro combinado cargado con las tablas de la base de datos. Me gustaría que al seleccionar una u otra, se cargase en la parte baja del formulario, en un subformulario. ¿Es posible?

2 respuestas

Respuesta
1

Por poder puedes hacerlo. Primero te explico las pegas. Por lo pronto en el subformulario, al cambiar de tabla debes, o eliminar las etiquetas, o luego en código cambiarles el nombre. Supongamos que tienes las tablas Articulos con los campos Idart, nombre, familia, categoria y Una(sólo pongo dos porque soy vago, vago), con los campos IdArt, yoquese, nolose, silose y supongamos que el combinado se llama Elegir y en el origen de la fila tienes los valores Articulos y Una y por último vamos a suponer que el subformulario, al que llamaremos Otro lo has construido con la tabla Una aunque luego le quites el origen de registros. En el evento después de actualizar del combinado pon

Me!Otro.Form.RecordSource = "select * from " & Me.Elegir & ""
Select Case Elegir
Case Is = "Articulos"
Me!Otro.Form!yoquese.ControlSource = "nombre"
Me!Otro.Form!nolose.ControlSource = "familia"
Me!Otro.Form!silose.ControlSource = "categoria"

End Select

Es decir, que cuando elijas la tabla Una, como el subformulario fue construida con ella no hace falta que le digas los orígenes de los controles, pero en caso de que elijas la tabla Articulos, que te los cambie.

También podrías hacerlo poniendo X subformularios, como ocultos, y en función de la tabla que elijas muestre uno u otro.

Respuesta

Otra opción, sin tanta "pega" es que tengas los distintos subformularios creados (o directamente las tablas) y los asignes al control subformulario.

Es muy sencillo de hacer: si tu control subformulario (el "recuadro" donde se carga el subformulario) se llama ctlSubformulario, en el evento "después de actualizar" de tu cuadro combinado (cboElige por ponerle un nombre) le pones:

Private Sub cboElige_AfterUpdate()
If Me.cboElige = "Uno" Then
Me.Secundario2.SourceObject = "subForm1"
ElseIf Me.cboElige = "Dos" Then
Me.Secundario2.SourceObject = "subForm2"
Else
Me.Secundario2.SourceObject = ""
End If
End Sub

en el caso de que tengas dos subformularios llamados subForm1 y subForm2, o este otro:

Private Sub cboElige_AfterUpdate()
If Me.cboElige = "Uno" Then
Me.Secundario2.SourceObject = "Tabla.Tabla1"
ElseIf Me.cboElige = "Dos" Then
Me.Secundario2.SourceObject = "Tabla.Tabla2"
Else
Me.Secundario2.SourceObject = ""
End If
End Sub

en el caso de que quieras mostrar directamente las tablas Tabla1 y Tabla2.

Saludos!


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas