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

Nota

Office 365 ProPlus pasa a llamarse Microsoft 365 Apps para empresas. Para obtener más información sobre este cambio, lea esta publicación de blog.

Moderado: requiere conocimientos básicos de macro, codificación e interoperabilidad.

Este artículo se aplica a un archivo de base de datos de Microsoft Access (.mdb) o a un archivo de base de datos de Microsoft Access (.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 vuelva a pedir la propiedad Filter de un formulario.
  • Use un formulario/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 une 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, modifique la base de datos de ejemplo Northwind.mdb. Es posible que desee hacer 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
El subformulario no es necesario 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 formulario en otros modos x

Nota

Estos métodos también se pueden aplicar a 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 autoformulario: columnar para crear un nuevo formulario basado en la tabla Productos y, a continuación, guarde el formulario como frmComboTest.

    Para ello 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 de 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 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 Asistente para desde, 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 los Asistentes para control están seleccionados.

    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 ficha 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 ficha 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 cuadro combinado 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 en función del 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 cuadro combinado 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 Productos mediante el Asistente para autoformulario: columnar 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 de la ficha 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 Productos mediante el Asistente para autoformulario: columnas 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 de la ficha 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 de la siguiente manera:

    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ño de subformulario/subinforme y, a continuación, cancele el Asistente para subformulario.
    • Arrastre y coloque el frmSub desde el panel de navegación en el formulario frmMain.
  5. Establezca las propiedades del control de subformulario de la siguiente manera:

    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 ilustra 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 Productos mediante el Asistente para autoformulario: columnar 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 evento para el cuadro combinado AfterUpdate 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.