You are on page 1of 2

CUADROS COMBINADOS INTELIGENTES-

ADENDA1

INTRODUCCIÓN
Me quedé con ganas de conseguir añadir a la lista de
valores del cuadro combinado aquellos valores nuevos que
podamos necesitar, sin necesidad de modificar
manualmente en vista diseño dicho listado, y sin necesitar
la ventana para editar elementos de lista de Access.

Por eso se me ocurrió esta forma, que lo hace de forma totalmente transparente para el
usuario.

EL PROCESO
Partimos de la tercera posibilidad (Cuadro Combinado con origen en una “Lista de
Valores”), pero con una peculiaridad, el campo de la tabla lo vamos a configurar simplemente
cómo texto, no le configuramos opciones de búsqueda.

En el formulario, cambiamos el cuadro de texto a combinado, y lo configuramos a nuestras


necesidades:
Origen de la fila: "Alamut"; "Book & You"; "DeBolsillo"; "Ediciones B"; "Espasa"; "Fantacsy";
"Gigamesh"; "Grijalbo"; "Maeva"; "Minotauro"; "Planeta"; "Planeta Internacional"; "Plaza &
Janes"; "RBA Coleccionables"; "Suma de Letras"; "Temas de Hoy"; "Timun Mas"; "Umbriel";
"Valdemar”
Tipo de origen de la lista: Lista de Valores
Limitar a la lista: Sí
Permitir ediciones de la lista: No
Expansión automática: No (si queremos que se autocomplete, la ponemos a Sí)

Para hacer que se despliegue automáticamente, volvemos a programar “Al cambiar”:

Private Sub Editorial_Change()


Me.Editorial.Dropdown
End Sub

Esto es algo que en el ejemplo anterior no os comenté, pero se pueden “añadir” nuevos
valores en tiempo de ejecución por medio del evento “Al no estar en la lista”, de forma
parecida a cómo lo hacíamos antes:

Private Sub cboEditorial_NotInList(NewData As String, Response As Integer)


Dim elRowSce As String
elRowSce = Me.cboEditorial.RowSource
Response = acDataErrContinue
Me.cboEditorial.RowSource = elRowSce & ";" & Chr(34) & NewData & Chr(34)
Me.cboEditorial.Value = NewData
End Sub

Si antes no lo comenté es porque si bien es cierto que te permite agregar el nuevo valor al
listado, al cerrar el formulario ese valor desaparece, con lo que es “poco práctico”.

Ahora se me ocurrió hacer el siguiente proceso en el botón de cerrar el formulario: coger el


listado con el nuevo valor (o nuevos), ordenarlo, abrir el formulario en vista diseño y oculto,

1 La BD de ejemplo os la podéis bajar aquí

1
Visítanos en http://neckkito.siliconproject.com.ar y en http://nksvaccessolutions.com/
asignarle el listado ordenado y guardar los cambios. De esta manera la próxima vez que
abramos el formulario tendremos los nuevos datos en el listado, y además, ordenados, cosa
que al usar el asistente de Access no conseguíamos.

Y sin más dilación, éste es el código:

Private Sub cmdCerrar_Click()


Dim miListado As String
Dim misValores() As String
Dim temp As String
Dim i As Integer, j As Integer
'Cojo el listado de valores actualizado
miListado = Me.cboEditorial.RowSource
'Abro el formulario de inicio el cierro FLibros
DoCmd.OpenForm "FInicio"
DoCmd.Close acForm, Me.Name
'Relleno una matriz con ellos, dividiendo la cadena en sus partes
misValores = Split(miListado, ";")
'Ordeno la matriz por el método de la burbuja
For i = 0 To UBound(misValores) - 1
For j = i + 1 To UBound(misValores)
If misValores(i) > misValores(j) Then
temp = misValores(i)
misValores(i) = misValores(j)
misValores(j) = temp
End If
Next j
Next i
'Reconstruyo al cadena de valores, ahora ordenada
miListado = ""
For i = 0 To UBound(misValores)
miListado = miListado & misValores(i) & ";"
Next i
'Le quito el último punto y coma
miListado = Left(miListado, Len(miListado) - 1)
'Abro el formulario en vista diseño y oculto
DoCmd.OpenForm "FLibros", acDesign, , , , acHidden
'Le asigno al combo el nuevo listado
Forms("FLibros").cboEditorial.RowSource = miListado
'Cierro guardando los cambios
DoCmd.Close acForm, "FLibors", acSaveYes
End Sub

2
Visítanos en http://neckkito.siliconproject.com.ar y en http://nksvaccessolutions.com/

You might also like