Astăzi o să vă arăt cum putem crea un formular ce conţine câmpuri calculate folosind cod VBA, funcţia DSum şi o interogare de tip Select.
O să adaptăm acest tutorial pentru o bază de date în care stocăm date despre poliţele auto pe care le realizăm.

După ce cream un formular simplu, vom insera 5 controale de tip Text Box:

  • txtS1;
  • txtS2;
  • txtS3;
  • txtS4;
  • txtS5.

Aceste controale vor afişa suma totală a poliţelor.

–––––––––––––––––––––––––––––––––––––––

Vom insera din nou încă 5 astfel de controale:

  • txtc1;
  • txtc2;
  • txtc3;
  • txtc4;
  • txtc5.

Aceste controale vor afişa sumele care ne rămân pentru poliţele realizate pentru anumite firme (comisionul).

–––––––––––––––––––––––––––––––––––––––

Vom insera din nou încă 5 astfel de controale:

  • txtFirmaX;
  • txtFirmaY;
  • txtFirmaZ;
  • txtFirmaH;
  • txtFirmaT.

Aceste controale vor afişa sumele pe care le vom preda.

**************************************************************************************

Baza de date conţine două tabele: tblAsiguratori şi tblPolite.

  • tblAsiguratori conţine o listă cu firmele de asigurare, dar şi cu comisioanele aferente;
  • tblPolite conţine informaţiile pe care le completăm pentru fiecare poliţă realizată.

**************************************************************************************

Interogarea Realizate Luna Aceasta este realizată pentru tabelul tblPolite şi afişează următoarele câmpuri:

  • Data_Realizării;
  • Suma_Încasată;
  • Asigurator;
  • Year([tblPolite].[Data_Realizării]);
  • Month([tblPolite].[Data_Realizării])

Ultimele două câmpuri afişează anul, respectiv luna pentru coloana Data_Realizării.
În plus, pentru ultimele două coloane, avem următoarele criterii:

  • Year(Now());
  • Month(Date()).

Datorită lor, interogarea va afişa doar înregistrările din anul curent, dar şi din luna curentă.
De asemenea, pentru ultimele coloane vom debifa casetele Show, pentru a nu le afişa în rezultatul interogării.

**************************************************************************************

Acum, în formular vom insera un Command Button cu numele cmdComision şi cu Caption-ul Calculează.
Apoi, executăm click dreapta pe el – Build EventCode Builder.

Funcţia DSum are următoarea sintaxă: DSum (expression, domain, [criteria])
În cazul nostru avem: DSum("Suma_Încasată", "[Realizate Luna Aceasta ]", "[Asigurator]='FirmaX'")

Unde:

  • Suma_Încasată – numele coloanei din tabelul tblPolite;
  • [Realizate Luna Aceasta] – numele interogări folosită pentru a afişa înregistrările din anul şi luna curentă;
  • [Asigurator]=’FirmaX’ – pe post de criteriu afişăm înregistrările ce corespund unei anumite de asigurări.

**************************************************************************************

Codul macro este următorul:
Private Sub cmdComision_Click()
'cream constante pentru comisioane
'dupa ce modificam comisionul in tabelul tblAsiguratori modificam si constantele de mai jos
Const x = 8.03
Const y = 10.18
Const z = 12.32

 ‘cream o procedura de error traping
On Error GoTo err

‘afişam valorile totale ale politelor pentru luna curenta
‘folosind interogarea „Realizate Luna Aceasta” si functia DSum
txtS1.Value = DSum(„Suma_Încasată”, „[Realizate Luna Aceasta ]”, „[Asigurator]=’FirmaX'”)
txtS2.Value = DSum(„Suma_Încasată”, „[Realizate Luna Aceasta ]”, „[Asigurator]=’FirmaY'”)
txtS3.Value = DSum(„Suma_Încasată”, „[Realizate Luna Aceasta ]”, „[Asigurator]=’FirmaZ'”)
txtS4.Value = DSum(„Suma_Încasată”, „[Realizate Luna Aceasta ]”, „[Asigurator]=’FirmaH'”)
txtS5.Value = DSum(„Suma_Încasată”, „[Realizate Luna Aceasta ]”, „[Asigurator]=’FirmaT'”)

‘calculam suma care trebuie predata
txtFirmaX.Value = Round(txtS1.Value – ((txtS1.Value * x) / 100), 4)
‘calculam comisionul care ramane
txtc1.Value = Round(txtS1.Value – txtFirmaX.Value, 4)

txtFirmaY.Value = Round(txtS2.Value – ((txtS2.Value * y) / 100), 4)
txtc2.Value = Round(txtS2.Value – txtFirmaY.Value, 4)

txtFirmaZ.Value = Round(txtS3.Value – ((txtS3.Value * x) / 100), 4)
txtc3.Value = Round(txtS3.Value – txtFirmaZ.Value, 4)

txtFirmaH.Value = Round(txtS4.Value – ((txtS4.Value * z) / 100), 4)
txtc4.Value = Round(txtS4.Value – txtFirmaH.Value, 4)

txtFirmaT.Value = Round(txtS5.Value – ((txtS5.Value * y) / 100), 4)
txtc5.Value = Round(txtS5.Value – txtFirmaT.Value, 4)
Exit Sub

'începe procedura de error traping
err:
MsgBox err.Description, vbOKOnly + vbInformation, "Eroare"
End Sub

**************************************************************************************

Acum, orice înregistrare ce corespunde criteriilor de mai sus, va fi calculată în formular.

Pentru fişierul de lucru, mergeţi în pagina de resurse.

Back To Top
Search