Sumar ciertos elementos de un cuadro de lista access

A tod@s

Espero me puedan ayudar con esta gran duda, estoy haciendo una base de datos en access y quisiera saber si se puede que al seleccionar por ejemplo 2 elementos de un cuadro de lista por ejemplo estos serian los prouctos cada uno con un precio en la tabla de productos, el precio de los dos se sumara en otra celda del formulario llamada monto total. Asi automaticamente al seleccionar los productos se sume el precio y de un total.

1 respuesta

Respuesta
1

Te dejo aquí un ejemplo que te he preparado, para que lo veas más fácil: http://www.filebig.net/files/JkHPnTbJYi

Si tu cuadro de lista se llama lstArticulos y tu cuadro de texto txtTotal, el código que has de usar, en el evento "Despues de actualizar" del cuadro de lista es este:

 'Declaras las variables
    Dim ctlList As Control
    Dim Opcion As Variant
    Dim miSuma As Currency
    Dim i As Integer
    'Inicias la suma
    miSuma = 0
    Set ctlList = Me.lstarticulos
    'Coges los valores seleccionados en el cuadro de lista, y los sumas
    For Each Opcion In ctlList.ItemsSelected
        miSuma = miSuma + ctlList.Column(2)
    Next Opcion
    Me.txtTotal = miSuma

Ten en cuenta dos cosas:

1º/ Para poder seleccionar varios artículos simultáneamente has de configurar el cuadro de lista como de selección múltiple.

2º/ Las columnas se empiezan a numerar en 0, por eso en el código de ejemplo la columna de precio se identifica como columna 2 (ctlList. Column(2)), cuando es la tercera columna del cuadro (la primera es el ID, la segunda el artículo y la tercera el precio)

Hola muchas gracias por la respuesta 

si se pudieron sumar los datos pero hace mal la suma, una suma de 500+200 me da 400

no se si me puedas ayudar 

muchas gracias 

Efectivamente, hay algo que no funciona en el código y siempre suma la misma columna.

Lo he corregido, y aparentemente este código suma bien:

Private Sub lstarticulos_AfterUpdate()
    'Declaramos las variables
    Dim ctlList As Control
    Dim Opcion As Variant
    Dim miSuma As Currency
    Dim i As Integer
    'Iniciamos la selección
    miSuma = 0
    Set ctlList = Me.lstarticulos
    'Cogemos los valores seleccionados en el cuadro de lista, y los añadimos a la selección
    For i = 0 To ctlList.ListCount - 1
        If ctlList.Selected(i) Then
            miSuma = miSuma + ctlList.Column(2, i)
        End If
    Next i
    Me.txtTotal = miSuma
End Sub

Hola me arroja un error me aparece un cuadro y me dice:

Ha hecho referencia a una propiedad mediante un argumento numérico que no es uno de los números de propiedad de la colección.

Y marca esto en amarillo en el código al seleccionar la opción Depurar

If ctlList.Selected(i) Then

no sea que se deba :(

pues a mí el código me funciona correctamente (http://www.filebig.net/files/BNyVNrZUgH )

Cuando te da el error, si pones el cursor encima de la i, ¿con qué valor de i te da el error?

Sin ver tu BD poco te puedo decir, salvo que compruebes que en el encabezado del módulo, debajo de la línea "Option Compare Database" no tengas esta otra: "Option Base 1".

Si fuera el caso, has de cambiar esta línea:

For i = 0 To ctlList.ListCount - 1

por esta otra:

For i = 1 To ctlList.ListCount

Hola gracias por la respuesta

Te envío mi base de datos

http://www.filebig.net/files/P6GikmsQAv 

Porque me sigue marcando error respecto al código de esta pregunta y de esta otra Hacer que un cuadro de lista de opción múltiple me traiga los valores que tengan la misma terminación que mi campo de proyecto

Espero me puedas ayudar

Gracias :)

Lo que fallaba es que tu campo es, en realidad, un campo multivalor y entonces la cosa cambia:

Private Sub Codigo_de_los_productos_AfterUpdate()
    Dim Opcion As Variant
    Dim miSuma As Currency
    miSuma = 0
    For Each Opcion In Me.Codigo_de_los_productos.ItemsSelected
        miSuma = miSuma + Me.Codigo_de_los_productos.Column(3, Opcion)
    Next
    Me.Monto_total = miSuma
End Sub

Te devuelvo la BD con las modificaciones de las dos preguntas funcionando: http://www.filebig.net/files/Sn7RHggEa7 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas