Excel VBA bestaat uit meerdere ingebouwde objecten, zoals bijvoorbeeld het object Workbook. Dit object bestaat weer uit eigenschappen, methodes en gebeurtenissen. Voorbeelden van deze elementen zijn respectievelijk 'het aantal werkbladen', 'het sluiten van het werkboek' en het uitvoeren van instructies 'bij het openen van een werkboek'.
In VBA kan de programmeur zelf een object maken met behulp van een klassenmodule.
In dit voorbeeld wordt het zelf gedefinieerde object Persoon aangemaakt om aan de hand van een persoons-id de bijbehorende persoonsgegevens (eigenschappen) uit een Access database te halen.
Module
'----------------------------------------------------------------------------------------------------------------------- ' Auteur : pascalterheege.nl ' Datum : 31-12-2015 ' Object : modPersoon ' Doel : persoonsgegevens lezen en schrijven ' Verwijzing : zie klasse ' Bron : '----------------------------------------------------------------------------------------------------------------------- Option Explicit Dim Persoon As clsPersoon '----------------------------------------------------------------------------------------------------------------------- ' Datum : 31-12-2015 ' Type : Subroutine ' Opmerking : klassenmodule initialiseren, procedures uitvoeren en klassenmodule sluiten '----------------------------------------------------------------------------------------------------------------------- Sub Plaatsen() Set Persoon = New clsPersoon Lezen Schrijven Set Persoon = Nothing End Sub '----------------------------------------------------------------------------------------------------------------------- ' Datum : 31-12-2015 ' Type : Subroutine ' Opmerking : persoonsgegevens laden a.d.h.v. ID (invoeren door gebruiker) '----------------------------------------------------------------------------------------------------------------------- Sub Lezen() Dim intID Do intID = InputBox("Geef het persoons-id op") Loop Until IsNumeric(intID) Persoon.ID = intID End Sub '----------------------------------------------------------------------------------------------------------------------- ' Datum : 31-12-2015 ' Type : Subroutine ' Opmerking : persoonsgegevens plaatsen in het actieve werkblad '----------------------------------------------------------------------------------------------------------------------- Sub Schrijven() [B1] = Persoon.ID [B2] = Persoon.Voorletter [B3] = Persoon.Voornaam [B4] = Persoon.Achternaam [B5] = Persoon.Geboortedatum End Sub
Klassenmodule
'----------------------------------------------------------------------------------------------------------------------- ' Auteur : pascalterheege.nl ' Datum : 31-12-2015 ' Object : clsPersoon ' Doel : persoonsgegevens uit een Access database halen a.d.h.v. ID ' Verwijzing : activeX Data Objects 2.8 ' Bron : '----------------------------------------------------------------------------------------------------------------------- Option Explicit Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Private pID As Integer Private pVoorletter As String Private pVoornaam As String Private pAchternaam As String Private pGeboortedatum As Date '----------------------------------------------------------------------------------------------------------------------- ' Datum : 31-12-2015 ' Type : Constructor ' Opmerking : database en recordset initialiseren '----------------------------------------------------------------------------------------------------------------------- Private Sub Class_Initialize() Set cn = New ADODB.Connection Set rs = New ADODB.Recordset With cn .ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " & ActiveWorkbook.Path & "\Persoon.accdb" .Open End With End Sub '----------------------------------------------------------------------------------------------------------------------- ' Datum : 31-12-2015 ' Type : Property ' Parameter : Waarde ' Opmerking : persoonsgegevens inlezen a.d.h.v. ID '----------------------------------------------------------------------------------------------------------------------- Public Property Let ID(Waarde) pID = Waarde With rs .Open "Select * from tblPersoon where ID = " & ID, cn If rs.EOF = False Then pVoorletter = .Fields("Voorletter").Value pVoornaam = .Fields("Voornaam").Value pAchternaam = .Fields("Achternaam").Value pGeboortedatum = .Fields("Geboortedatum").Value Else MsgBox "Persoon met ID " & ID & " is niet gevonden!", vbCritical End End If End With End Property '----------------------------------------------------------------------------------------------------------------------- ' Datum : 31-12-2015 ' Type : Property ' Opmerking : waarden teruggeven '----------------------------------------------------------------------------------------------------------------------- Public Property Get ID() ID = pID End Property Public Property Get Voorletter() Voorletter = pVoorletter End Property Public Property Get Voornaam() Voornaam = pVoornaam End Property Public Property Get Achternaam() Achternaam = pAchternaam End Property Public Property Get Geboortedatum() Geboortedatum = pGeboortedatum End Property '----------------------------------------------------------------------------------------------------------------------- ' Datum : 31-12-2015 ' Type : Destructor ' Opmerking : recordset en database sluiten '----------------------------------------------------------------------------------------------------------------------- Private Sub Class_Terminate() rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub
Download hier het oefenbestand.