skip to Main Content

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.

Câmpuri calculate în formular folosind VBA, interogări şi funcţii

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

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.

Câmpuri calculate în formular folosind VBA, interogări şi funcţii

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

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.

Câmpuri calculate în formular folosind VBA, interogări şi funcţii

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

(Visited 7 times, 1 visits today)

Cosmin Tătaru

Pasionat de blogging și tehnologie încă din 2009, Cosmin este aici să vă ajute să vă creșteți vânzările și productivitatea punând tehnologia la treabă pentru dumneavoastră.

Suport-Clienti
Mergeți sus