Sumar datos de cuadro de lista

Tengo un cuadro de lista en un formulario de acces y necesito saber cómo hacer una suma de totales para imprimirlo en un informe.

1 respuesta

Respuesta
1

No sé si te refieres a que seleccionas varios valores del cuadro de lista y en otro control te dé el total. Por ejemplo, supongamos que tengo el cuadro de lista donde selecciono

Cuando pongo el cursor el el cuadro de texto Total

En este caso, ya que no sé como quieres calcularlo, en el evento Al recibir el enfoque del cuadro de texto Total, creo un procedimiento de evento y pongo

Private Sub Total_GotFocus()
Dim a As Variant
For Each a In Me.Lista6.ItemsSelected
Total = Nz([Total]) + Val("" & Me.Lista6.ItemData(a) & "")
Next
End Sub

Ya lo intento.... muchas gracias 

Julián...me explico lo que quiero es que una vez filtrados los datos en el cuadro de lista imprimir los registros y que todos los productos iguales se sumen y poder verlos en un informe...

¿Puedes poner una imagen del cuadro de lista y del informe?

Lo que necesito es que en un informe se me sumen los totales de los artículos, por ejemplo; guantes de carnaza 2

Este es el código del botón imprimir: 

Private Sub BtnLimpiar_Click()
Dim SQL As String
SQL = "SELECT Consulta_Buscar_EPP.ITEM, Consulta_Buscar_EPP.FECHA, Consulta_Buscar_EPP.AREA, Consulta_Buscar_EPP.CARGO, Consulta_Buscar_EPP.NOMBRE, Consulta_Buscar_EPP.SECCIÓN, Consulta_Buscar_EPP.DESCRIPCIÓN, Consulta_Buscar_EPP.OBSERVACIÓN, Consulta_Buscar_EPP.CANT, Consulta_Buscar_EPP.CAMBIO "
SQL = SQL & " FROM Consulta_Buscar_EPP "
Me.Lista_EPPs.RowSource = SQL
Me.txtFechaInicial = Null
Me.txtFechaFinal = Null
Me.Buscar_EPPs = Null
Me.Buscar_Supervisor = Null
End Sub


Private Sub Imprimir_Click()
Dim IdItm As Variant, SQL As String

If Me.Lista_EPPs.ItemsSelected.Count >= 1 Then
CurrentDb.Execute "DELETE FROM Auxiliar_EPPs", dbFailOnError
For Each IdItm In Me.Lista_EPPs.ItemsSelected
CurrentDb.Execute "INSERT INTO Auxiliar_EPPs SELECT Consulta_Buscar_EPP.ITEM, Consulta_Buscar_EPP.FECHA, Consulta_Buscar_EPP.AREA, Consulta_Buscar_EPP.CARGO, Consulta_Buscar_EPP.NOMBRE, Consulta_Buscar_EPP.SECCIÓN, Consulta_Buscar_EPP.DESCRIPCIÓN, Consulta_Buscar_EPP.OBSERVACIÓN, Consulta_Buscar_EPP.CANT, Consulta_Buscar_EPP.CAMBIO FROM Consulta_Buscar_EPP WHERE ITEM = " & Me.Lista_EPPs.ItemData(IdItm) & "", dbFailOnError
Me.Lista_EPPs.SetFocus: Me.Lista_EPPs.Selected(IdItm) = False
Next IdItm
'DoCmd.OpenReport "Informe_Consulta_EPPs", acViewPreview
'Manejador de error 2501
On Error GoTo hay_error
Dim strUserName3 As String, strPath3 As String
strPath3 = "E:\Informacion 2020\Documentos\Bases _De_Datos_Access\PDF MASA\Salidas_EPP.pdf"
'strPath3 = "C:\Users\MASA\Documents\SALIDA E INVENTARIOS\Salidas_EPP.pdf"
DoCmd.OutputTo acOutputReport, "Informe_Consulta_EPPs", acFormatPDF, strPath3, True
Error_Exit:
Exit Sub
hay_error:
If Err.Number = 2501 Then
MsgBox "El Informe EPP ya fue generado y esta abierto, debe cerrarlo si desea generarlo nuevamente ", vbInformation, "Informe EPP"
End If
Resume Error_Exit
Me.Lista_EPPs.Requery
Else
MsgBox "Debe seleccionar uno o más registros", vbInformation, "Aviso": Me.Imprimir.SetFocus
End If

End Sub

Me he desmayado con el código que has puesto. Mira, si creo una tabla auxiliar, en este caso Tabla1 como en la imagen

Con esa tabla creo un informe, más o menos como en la imagen

Ten en cuenta que mi ordenador es un portátil y la pantalla no da para mucho, por lo que tengo que tratar de ajustar las cosas, por eso, en vez de poner la suma del importe al pie de algún grupo te lo pongo a la derecha como Suma y Sigue

Cuando en el formulario, en el cuadro de lista Lista6 elijo algunos valores

Y pulso el botón Imprimir

El cuadro de lista tiene 5 columnas, la primera es la de Idcliente, a la que le doy un ancho de 0 cm para que no se vea pero es la columna dependiente. Cuando pulso el botón, primero pasa a la tabla Tabla1, al campo CampoA, los valores de los idcliente que he elegido. Luego abre el informe Tabla1 sólo con esos Idcliente.

El código del botón Imprimir es

Private Sub Imprimir_Click()
DoCmd.SetWarnings False
Dim Julian As Variant
For Each Julian In Me.Lista6.ItemsSelected
DoCmd.RunSQL "insert into tabla1(campoa)values('" & Me.Lista6.ItemData(Julian) & "')"
Next
DoCmd.OpenReport "tabla1", acPreview
End Sub

Luego, en el informe le tengo puesto

Private Sub Detalle_Format(Cancel As Integer, FormatCount As Integer)
NombreCliente = DLookup("nombrecliente", "clientes", "idcliente=" & Me.CampoA & "")
Ciudad = DLookup("Ciudad", "clientes", "idcliente=" & Me.CampoA & "")
Pais = DLookup("pais", "clientes", "idcliente=" & Me.CampoA & "")
Importe = DLookup("importe", "clientes", "idcliente=" & Me.CampoA & "")
End Sub
Private Sub Report_Close()
DoCmd.SetWarnings False
DoCmd.RunSQL "delete * from tabla1"
End Sub

Es decir, que cuando lo abres, busca en la tabla Clientes, los datos correspondientes a esos Idcliente que "he elegido" en el cuadro de lista. Le he puesto de el evento Al cerrar, para que cuando cierres el informe, la tabla Tabla1 te quede "limpia" para nuevas búsquedas.

El el cuadro de texto de la derecha del informe, en sus propiedades-datos le digo que su origen sea el control Importe, y que haga la suma continua.

Julián, voy a probarlo, la verdad si es difícil de entender mi código cuando no tienes toda la información de las consultas por ejemplo.... pero estoy probando..muchas gracias 

Reconozco que no me gustan las consultas. Pienso que el lenguaje SQL es mucho menos versátil que el VB. Además, para poder usar una consulta previamente tienes que haber "metido" datos en las tablas origen. Por tanto, ¿para qué esperar, si puedes hacer las cosas a medida que vas "metiendo" datos en un formulario?.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas