Cambiar los valores de un cuadro de lista desde vba

Soy programador de PHP y C++, y por cosas de la vida me han pedido una aplicación de BBDD ACCESS, hasta hace muy poco sabía poco o nada de VBA, después de pelearme y acabar comprendiendo el funcionamiento de este lenguaje, estoy llevando a cabo dicho proyecto y está avanzadísimo, pero como podréis suponer, al llevar poco en este lenguaje me aparecen trabas, y esta es la siguiente:

Tengo varios apartados, PRODUCTOS, CLIENTES, PROVEEDORES, etc...

En todos ellos están sus botones gestionando la información de cada una de las tablas asociadas,

El problema viene a un botón concreto que es el de buscar, y es que al pulsarlo comparten un mismo formulario.

Dicho formulario tiene una búsqueda simple y avanzada, y al pulsar en avanzada aparece un cuadro de lista del cual el usuario podrá seleccionar a que campo está dirigida la búsqueda, lo que realmente no se hacer, es cambiar los valores de dentro de ese cuadro de lista, por que son varios valores y, ó bien no se la sintaxis de VALUE para varios valores, o se hace de otra manera.

Lo podría solucionar poniendo varios cuadros de lista que aparezcan según el botón pulsado, pero me parece un gasto innecesario de recursos y una mala praxis.
Si me pudieran decir como hacerlo se lo agradecería mucho.

Tampoco tengo muy claro si poner esta pregunta en VBA o en ACCESS, si aquí no va, disculpen.

Perdón por el tocho para preguntar algo tan básico.. un saludo..

1 respuesta

Respuesta
1

Para cambiar el origen de datos de un cuadro de lista (y cuadro combinado) tienes que modificar su propiedad RowSource y luego actualizarlo con Requery. Además, puede que sea necesario que modifiques alguna otra propiedad como RowSourceType, ColumnCount o BoundColumn..

En la ayuda de access puedes consultar todas estas propiedades, y además, suele traer ejemplos explicativos, si quieres conocerlas a fondo.

Te pongo un ejemplo, para que veas cómo sería:

Supongamos que tienes un cuadro de lista que se llama lstResultado, en el que muestras el resultado de una consulta que dependerá de lo que hayas seleccionado en otros controles, por ejemplo la tabla en un cuadro combinado llamado cboTabla y una fecha en un cuadro de texto llamado txtFecha. Además, si seleccionas la tabla Productos, te mostrará los campos "Descripcion" y "Precio" y si escoges Clientes, "Nombre","CIF", "Direccion"

El código de tu botón podría ser:

Private Sub NombreBoton_Click()

If Me.cboTabla="Productos" Then

Me.lstResultado.RowSource="SELECT Descripcion, Precio FROM PRODUCTOS WHERE FechaAlta<#" & txtFecha & "#"   'Le asignas el origen de valores

Me.lstResultado.ColumnCount=2   'Le pones 2 columnas

Me.lstResultado.Requery  'Actualizas

Else

Me.lstResultado.RowSource="SELECT Nombre,CIF, Direccion FROM Clientes WHERE FechaAlta<#" & txtFecha & "#"   'Le asignas el origen de valores

Me.lstResultado.ColumnCount=3   'Le pones 3 columnas

Me.lstResultado.Requery  'Actualizas

End If

Si tienes más dudas, no dudes en preguntar.

Saludos!


Una nueva web y foro de Access, pásate: http://nksvaccessolutions.com/ 

Muchas gracias, en breve buscaré información y  probaré las propiedades que comentas para llevarlo a cabo, si soluciono el problema te lo comunicaré.. Un saludo :)

Te comento, por lo que puedo ver en tu código, lo que hago  es hacer una consulta SQL para hacer la búsqueda dentro del cuadro de texto, no es exactamente lo que quiero hacer, que por cierto me lo guardo que siempre viene bien xD.

La búsqueda aparece en un subformulario que está ubicado en el formulario principal,  la programación de la búsqueda la tengo finalizada y funciona correctamente, lo que ocurre, es que como puedes observar en la imagen, el cuadro de texto tiene unos valores definidos, para que el usuario escoja el campo seleccionado.
Tengo preparado un condicional a la hora de "Cargar" el formulario de búsqueda para saber que botón a sido pulsado, y a partir de hay sólo hay que cambiarle los valores,  lo que quiero, es saber como modificar la lista de valores, en vez de "Código, Nombre, Precio, IVA, Descuento y TOTAL", debe aparecer, "ID, Nombre, Apellidos, etc", para poder reutilizar el mismo cuadro de texto en dicho formulario.

Muy agradecido con tu aporte.

Perdón por ser tan pesado, me ha faltado comentar, que en la ayuda de ACCESS he visto que se debe hacer con separadores  ;  pero siempre me da error de sintaxis :(

No te disculpes por preguntar, que así es cómo se aprende.

Vamos por partes:

1º/ la solución que te di en primer lugar lo hice pensando en que el tipo de origen de la fila (RowSourceType) era "Tabla/Consulta", por eso en la propiedad "Origen de la fila" (RowSource). Veo que en tu caso usas "Lista de valores", y los pones "a mano".

La idea sería la misma, pero en vez de la SQL, pones los valores que quieras (ojo con el número de columnas si cambia):

Private Sub NombreBoton_Click()

If Me.cboTabla="Productos" Then

Me.lstResultado.RowSource="Código, Nombre, Precio, IVA, Descuento, TOTAL"   'Le asignas el origen de valores

Me.lstResultado.ColumnCount=6   'Le pones 6 columnas

Me.lstResultado.Requery  'Actualizas

Else

Me.lstResultado.RowSource="ID, Nombre, Apellidos,Domicilio"   'Le asignas el origen de valores

Me.lstResultado.ColumnCount=4   'Le pones 4 columnas

Me.lstResultado.Requery  'Actualizas

End If

2º/ Lo de usar punto y coma (;) o coma (,) como delimitador, variará en función de la configuración regional de tu ordenador y/o de tu office/access. Por lo general, la versión de España usa el punto y coma, mientras que las versiones inglesas y sudamericanas usan la coma. Si no te funciona una (te da error el propio access), usa la otra.

Muchas gracias, mira que mientras hacia pruebas con el Rowsource, probé esa sintaxis, y por empanamiento no vi el cambio por que seguía vacío, al verlo me he sorprendido por que digo, copón si eso lo he probado, pues nada, se ve que ya estaba embotado, funciona correctamente, gracias :)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas