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.
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
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...
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?.
- Compartir respuesta