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
01 | '----------------------------------------------------------------------------------------------------------------------- |
02 | ' Auteur : pascalterheege.nl |
03 | ' Datum : 31-12-2015 |
04 | ' Object : modPersoon |
05 | ' Doel : persoonsgegevens lezen en schrijven |
06 | ' Verwijzing : zie klasse |
07 | ' Bron : |
08 | '----------------------------------------------------------------------------------------------------------------------- |
09 | Option Explicit |
10 |
11 | Dim Persoon As clsPersoon |
12 | '----------------------------------------------------------------------------------------------------------------------- |
13 | ' Datum : 31-12-2015 |
14 | ' Type : Subroutine |
15 | ' Opmerking : klassenmodule initialiseren, procedures uitvoeren en klassenmodule sluiten |
16 | '----------------------------------------------------------------------------------------------------------------------- |
17 | Sub Plaatsen() |
18 | |
19 | Set Persoon = New clsPersoon |
20 | |
21 | Lezen |
22 | Schrijven |
23 | |
24 | Set Persoon = Nothing |
25 | |
26 | End Sub |
27 |
28 | '----------------------------------------------------------------------------------------------------------------------- |
29 | ' Datum : 31-12-2015 |
30 | ' Type : Subroutine |
31 | ' Opmerking : persoonsgegevens laden a.d.h.v. ID (invoeren door gebruiker) |
32 | '----------------------------------------------------------------------------------------------------------------------- |
33 | Sub Lezen() |
34 |
35 | Dim intID |
36 | |
37 | Do |
38 | intID = InputBox( "Geef het persoons-id op" ) |
39 | Loop Until IsNumeric(intID) |
40 | |
41 | Persoon.ID = intID |
42 |
43 | End Sub |
44 | '----------------------------------------------------------------------------------------------------------------------- |
45 | ' Datum : 31-12-2015 |
46 | ' Type : Subroutine |
47 | ' Opmerking : persoonsgegevens plaatsen in het actieve werkblad |
48 | '----------------------------------------------------------------------------------------------------------------------- |
49 | Sub Schrijven() |
50 |
51 | [B1] = Persoon.ID |
52 | [B2] = Persoon.Voorletter |
53 | [B3] = Persoon.Voornaam |
54 | [B4] = Persoon.Achternaam |
55 | [B5] = Persoon.Geboortedatum |
56 |
57 | End Sub |
Klassenmodule
001 | '----------------------------------------------------------------------------------------------------------------------- |
002 | ' Auteur : pascalterheege.nl |
003 | ' Datum : 31-12-2015 |
004 | ' Object : clsPersoon |
005 | ' Doel : persoonsgegevens uit een Access database halen a.d.h.v. ID |
006 | ' Verwijzing : activeX Data Objects 2.8 |
007 | ' Bron : |
008 | '----------------------------------------------------------------------------------------------------------------------- |
009 | Option Explicit |
010 |
011 | Dim cn As ADODB.Connection |
012 | Dim rs As ADODB.Recordset |
013 |
014 | Private pID As Integer |
015 | Private pVoorletter As String |
016 | Private pVoornaam As String |
017 | Private pAchternaam As String |
018 | Private pGeboortedatum As Date |
019 | '----------------------------------------------------------------------------------------------------------------------- |
020 | ' Datum : 31-12-2015 |
021 | ' Type : Constructor |
022 | ' Opmerking : database en recordset initialiseren |
023 | '----------------------------------------------------------------------------------------------------------------------- |
024 | Private Sub Class_Initialize() |
025 | |
026 | Set cn = New ADODB.Connection |
027 | Set rs = New ADODB.Recordset |
028 | |
029 | With cn |
030 | .ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " & ActiveWorkbook.Path & "\Persoon.accdb" |
031 | .Open |
032 | End With |
033 |
034 | End Sub |
035 | '----------------------------------------------------------------------------------------------------------------------- |
036 | ' Datum : 31-12-2015 |
037 | ' Type : Property |
038 | ' Parameter : Waarde |
039 | ' Opmerking : persoonsgegevens inlezen a.d.h.v. ID |
040 | '----------------------------------------------------------------------------------------------------------------------- |
041 | Public Property Let ID(Waarde) |
042 |
043 | pID = Waarde |
044 | |
045 | With rs |
046 | |
047 | .Open "Select * from tblPersoon where ID = " & ID, cn |
048 | |
049 | If rs.EOF = False Then |
050 | |
051 | pVoorletter = .Fields( "Voorletter" ).Value |
052 | pVoornaam = .Fields( "Voornaam" ).Value |
053 | pAchternaam = .Fields( "Achternaam" ).Value |
054 | pGeboortedatum = .Fields( "Geboortedatum" ).Value |
055 | |
056 | Else |
057 | |
058 | MsgBox "Persoon met ID " & ID & " is niet gevonden!" , vbCritical |
059 | End |
060 | |
061 | End If |
062 | |
063 | End With |
064 |
065 | End Property |
066 | '----------------------------------------------------------------------------------------------------------------------- |
067 | ' Datum : 31-12-2015 |
068 | ' Type : Property |
069 | ' Opmerking : waarden teruggeven |
070 | '----------------------------------------------------------------------------------------------------------------------- |
071 | Public Property Get ID() |
072 |
073 | ID = pID |
074 | |
075 | End Property |
076 | Public Property Get Voorletter() |
077 |
078 | Voorletter = pVoorletter |
079 | |
080 | End Property |
081 | Public Property Get Voornaam() |
082 | |
083 | Voornaam = pVoornaam |
084 |
085 | End Property |
086 | Public Property Get Achternaam() |
087 |
088 | Achternaam = pAchternaam |
089 |
090 | End Property |
091 | Public Property Get Geboortedatum() |
092 |
093 | Geboortedatum = pGeboortedatum |
094 |
095 | End Property |
096 | '----------------------------------------------------------------------------------------------------------------------- |
097 | ' Datum : 31-12-2015 |
098 | ' Type : Destructor |
099 | ' Opmerking : recordset en database sluiten |
100 | '----------------------------------------------------------------------------------------------------------------------- |
101 | Private Sub Class_Terminate() |
102 | |
103 | rs.Close |
104 | cn.Close |
105 | |
106 | Set rs = Nothing |
107 | Set cn = Nothing |
108 |
109 | End Sub |
Download hier het oefenbestand.