Ciao
1° Fase
Comincia con il creare una tabella con questi campi:
nome: tbl_mate
ID -> num automatica
Data -> formato giorno (formato data in cifre)
Quantita -> valuta (Euro; decimali automatici)
Costo -> valuta (Euro; decimali 3)
Caricati: numerico (intero lungo)
ps:
questi quattro campi corrispondono in ordine sequenziale alle colonne non calcolate del prospetto excel che hai postato.
nb:
se non usi gli stessi nomi poi provvederai tu alle sostituzioni nelle query e nel codice...
2° Fase
Crea una query chiamata "qry_mate" e nella visualizzazione SQL
SELECT tbl_mate.ID, tbl_mate.Data, tbl_mate.Quantita, tbl_mate.Costo, CDbl(Mid(CStr(([Quantita]/[Costo])/1000),1,8)) AS Gasolio, tbl_mate.Caricati, Nz([Costo])*Nz([Caricati]*1000) AS Totale, Nz(Nz([Quantita])-Nz([Totale]))/1000 AS Diff, valore(CLng([ID])) AS DiffPar, Year([data]) AS anno
FROM tbl_mate
WHERE (((Year([data]))=2013));
non modificare il 2013 e non preoccuparti se ti da errore per ora
3* fase
nome:frm_mate
Crea una maschera più elementi basata sulla query ed esegui la formattazione dei controlli in maniera tale che vengano visualizzati correttamente (scheda Formato dalle proprietà in ogni controllo ed eventualmente utilizzando il menu scheda HOME) di fianco all'intestazione metti un textbox dove come nome elemento metterai "txt_anno" e come valore predefinito 2013...
4* Crea un modulo (bus_mate) e cancella eventuali moduli già esistenti della precedente demo.
fai doppio click e incolla
Public Function valore(Record As Long) As Double
'On Error Resume Next
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim qdf As DAO.QueryDef
Set db = CurrentDb
Set qdf = db.CreateQueryDef("", "SELECT Sum(qry_mate.Diff) AS ParDiff FROM qry_mate WHERE (((qry_mate.ID)<=" & CStr(Record) & "));")
Set rs = qdf.OpenRecordset
rs.MoveFirst
valore = rs.Fields("ParDiff")
rs.Close
qdf.Close
db.Close
Set rs = Nothing
Set db = Nothing
Set qdf = Nothing
End Function
Public Function CreaSupportoQry()
On Error Resume Next
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDb
Set qdf = db.CreateQueryDef("qry_Mate", "SELECT tbl_mate.ID, tbl_mate.Data, tbl_mate.Quantita, tbl_mate.Costo, CDbl(Mid(CStr(([Quantita]/[Costo])/1000),1,8)) AS Gasolio, tbl_mate.Caricati, Nz([Costo])*Nz([Caricati]*1000) AS Totale, Nz(Nz([Quantita])-Nz([Totale]))/1000 AS Diff, valore(CLng([ID])) AS DiffPar, Year([data]) AS anno FROM tbl_mate WHERE (((Year([data]))=" & CStr(Form_frm_mate.txt_anno) & "));")
DoCmd.DeleteObject acQuery, "qry_mate"
Set qdf = db.CreateQueryDef("qry_Mate", "SELECT tbl_mate.ID, tbl_mate.Data, tbl_mate.Quantita, tbl_mate.Costo, CDbl(Mid(CStr(([Quantita]/[Costo])/1000),1,8)) AS Gasolio, tbl_mate.Caricati, Nz([Costo])*Nz([Caricati]*1000) AS Totale, Nz(Nz([Quantita])-Nz([Totale]))/1000 AS Diff, valore(CLng([ID])) AS DiffPar, Year([data]) AS anno FROM tbl_mate WHERE (((Year([data]))=" & CStr(Form_frm_mate.txt_anno) & "));")
qdf.Close
db.Close
Set db = Nothing
Set qdf = Nothing
End Function
ci sono altre cose da fare se fin qui non ci sono problemi vediamo poi