Cómo pasar a un registro específico desde una selección de cuadro combinado en Microsoft Access

Moderado: requiere aptitudes básicas de macro, codificación e interoperabilidad.

Este artículo se aplica a un archivo de base de datos de Microsoft Access .mdb o .accdb.

Resumen

En este artículo se muestran cuatro métodos para pasar a un registro específico en función de la selección de un cuadro combinado. Los métodos son los siguientes:

  • En el evento AfterUpdate de un cuadro combinado, ejecute código que use el método FindFirst.
  • En el evento AfterUpdate de un cuadro combinado, llame a una macro que requeriese la propiedad Filter de un formulario.
  • Use un formulario o subformulario, con un cuadro combinado en el formulario principal, y los datos del subformulario, enlazados por las propiedades LinkMasterFields y LinkChildFields del control de subformulario.
  • Base el formulario en una consulta que combina dos tablas y, a continuación, use la técnica AutoLookup para enlazar un cuadro combinado al campo que controla la combinación.

Estos cuatro métodos se describen en la sección "Más información" de este artículo y se basan en la base de datos de ejemplo Northwind.

Más información

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía, ya sea expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Se considera que está familiarizado con el lenguaje de programación que se muestra y con las herramientas para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos adaptados a sus necesidades específicas.

Precaución

Si sigue los pasos de este ejemplo, modificará la base de datos de ejemplo Northwind.mdb. Es posible que desee realizar una copia de seguridad del archivo Northwind.mdb y seguir estos pasos en una copia de la base de datos.

En la tabla siguiente se comparan las características (ventajas e inconvenientes) de los cuatro métodos:

Método 1 2 3 4
No requiere código ni macros x
No se requiere subformulario x x
Puede desplazarse a otros registros x x
No requiere una consulta x x x x
Puede editar registros x x x x
Abre el formulario en otros modos x

Nota:

Estos métodos también se pueden aplicar a los cuadros de texto.

Método 1

  1. Cree una tabla denominada Products que tenga el campo ProductID y el campo ProductName.

  2. Use el Asistente para autoformar: columnar para crear un nuevo formulario basado en la tabla Products y, a continuación, guarde el formulario como frmComboTest.

    Para hacerlo en Microsoft Office Access 2003 y versiones anteriores de Access, siga estos pasos:

    1. En la ventana Base de datos , haga clic en Formularios en Objetos.
    2. Haga clic en Nuevo en la barra de herramientas de la ventana Base de datos.
    3. En el cuadro de diálogo Nuevo formulario , haga clic en Autoformulario: columnar, seleccione la tabla Productos en la lista desplegable y, a continuación, haga clic en Aceptar.
    4. Guarde el formulario como frmComboTest.

    Para hacerlo en Microsoft Office Access 2007 o en una versión posterior, siga estos pasos:

    1. En la pestaña Crear , haga clic en Asistente para formularios en el grupo Formularios .
    2. En el cuadro de diálogo Del asistente , seleccione la tabla Productos de la lista desplegable.
    3. Seleccione los campos que desea ver en el nuevo formulario y, a continuación, haga clic en Siguiente.
    4. Seleccione la opción Columnar para establecer el diseño del formulario y, a continuación, haga clic en Siguiente.
    5. Escriba frmComboTest como título del formulario y, a continuación, haga clic en Finalizar.
  3. Use el Asistente para cuadros combinados para agregar un cuadro combinado sin enlazar. Para ello, siga estos pasos:

    1. Abra el formulario frmComboTest en la vista Diseño.
    2. En la barra de herramientas, asegúrese de que asistentes de control está seleccionado.

    Nota:

    En Access 2007 o una versión posterior, asegúrese de que usar asistentes de control está seleccionado en el grupo Controles de la pestaña Diseño .

    1. Cree un cuadro combinado en el formulario frmComboTest.

    Nota:

    En Access 2007 o una versión posterior, haga clic en Cuadro combinado en el grupo Controles de la pestaña Diseño y, a continuación, haga clic en el formulario frmComboTest. En el cuadro de diálogo Elegir generador , haga clic en Asistente para cuadros combinados y, a continuación, haga clic en Aceptar.

    1. En el cuadro de diálogo Asistente para cuadros combinados , seleccione la opción Buscar un registro en mi formulario según el valor que seleccioné en mi cuadro combinado y, a continuación, haga clic en Siguiente.
    2. Seleccione los campos ProductID y ProductName y, a continuación, haga clic en Siguiente.
    3. Haga clic en Finalizar.

    El Asistente para cuadros combinados crea un procedimiento de evento similar al siguiente:

    Private Sub Combo0_AfterUpdate()
         ' Find the record that matches the control.
         Dim rs As Object
    
     Set rs = Me.Recordset.Clone
         rs.FindFirst "[ProductID] = " & Str(Nz(Me![Combo20], 0))
         If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    End Sub
    
  4. Vea el formulario frmComboTest en la vista Formulario.

    Tenga en cuenta que, al elegir un nombre de producto en el cuadro combinado, se le mueve al registro del producto que seleccionó.

Método 2

  1. Cree un nuevo formulario basado en la tabla Products mediante el Asistente para autoformar: columnar , tal como se indica en el paso 2 del método 1 y, a continuación, guarde el formulario como frmComboTest2.

  2. En la página Hoja de propiedades del formulario frmComboTest2, establezca la propiedad Filter en la pestaña Datos en [ProductName] = Forms![frmComboTest2]![cboLookup].

  3. Agregue un cuadro combinado sin enlazar denominado cboLookup y, a continuación, establezca las propiedades del control de la siguiente manera:

    Combo Box
    -----------------------------------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Select [ProductName] from Products;
    BoundColumn: 1
    ColumnWidths: 1"
    AfterUpdate: mcrLocateProduct
    
  4. Cree la siguiente macro denominada mcrLocateProduct:

    Action
    --------------------------------------
    SetValue
    Requery
    
    mcrLocateProduct Actions
    --------------------------------------
    SetValue
    Item: Forms![frmComboTest2].FilterOn
    Expression: True
    

    Observe que al abrir el formulario frmComboTest2 y seleccionar un nombre de producto en el cuadro combinado cboLookup, el filtro se establece en ese valor.

Método 3

  1. Cree un nuevo formulario basado en la tabla Products mediante el Asistente para autoformar: columnar , como se indica en el paso 2 del método 1, y, a continuación, guarde el formulario como frmSub.

  2. En la página Hoja de propiedades del formulario frmSub, establezca la propiedad Vista predeterminada en la pestaña Formato en Formulario único.

  3. Cree un nuevo formulario (que no se base en ninguna tabla o consulta) y guárdelo como frmMain. A continuación, agregue un cuadro combinado y establezca sus propiedades como se indica a continuación:

    Combo Box
    ----------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Products
    ColumnCount: 4
    ColumnWidths: 0";2"
    BoundColumn: 1
    
  4. Inserte un control Subformulario del formulario frmSub.

    • Vaya a Diseñar>subformulario o subinforme y, a continuación, cancele el Asistente para subformulario.
    • Arrastre y coloque frmSub desde el panel de navegación al formulario frmMain.
  5. Establezca las propiedades del control de subformulario como se indica a continuación:

    Subform
    ----------------------------
    LinkChildFields: [ProductID]
    LinkMasterFields: cboLookup
    

    Al cambiar el valor del control cboLookup, Access garantiza que los registros del subformulario coincidan con el cuadro combinado.

    El formulario Pedidos de la base de datos de ejemplo Northwind muestra este método. El subformulario Detalles del pedido está relacionado con las propiedades LinkMasterFields y LinkChildFields .

Método 4: Usar la acción de macro OpenForm con la cláusula WHERE

  1. Cree un nuevo formulario basado en la tabla Products mediante el Asistente para autoformar: columnar , tal como se indica en el paso 2 del método 1 y, a continuación, guarde el formulario como frmComboTest5.

  2. Agregue un cuadro combinado sin enlazar denominado cboLookup y, a continuación, establezca las propiedades del control de la siguiente manera:

    Combo Box
    -----------------------------------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: SELECT [ProductID], [ProductName] FROM Products ORDER BY [ProductName];
    BoundColumn: 1
    ColumnCount: 2
    ColumnWidths: 0";1"
    
  3. En el Generador de macros, cree una nueva macro incrustada en el AfterUpdate evento para el cuadro combinado cboLookup.

  4. En la lista desplegable Agregar nueva acción , seleccione OpenForm y, a continuación, establezca las siguientes propiedades:

    Form Name:   frmComboTest5
    View:        Form
    Filter Name: <leave as empty>
    Where Condition: [ID] = [Forms]![frmComboTest5]![cboLookup].value
    Data Mode: <optional>
    Window Mode: <optional>
    
  5. Guarde y cierre la macro.

  6. Guarde y ejecute el formulario.

Después de cambiar el valor del cuadro combinado, el formulario se cerrará y se abrirá de nuevo con un filtro aplicado.