17.05.2014 Views

Besturingselementen en formulieren - Pearson Education

Besturingselementen en formulieren - Pearson Education

Besturingselementen en formulieren - Pearson Education

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

11<br />

BESTURINGS-<br />

ELEMENTEN EN<br />

FORMULIEREN<br />

De belangrijkste punt<strong>en</strong> van hoofdstuk 11<br />

<strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> zoals knopp<strong>en</strong>, lijst<strong>en</strong> invulvakk<strong>en</strong>, keuzerondjes <strong>en</strong> dergelijke.<br />

Er zijn vele dialoogv<strong>en</strong>sters in Excel beschikbaar die u als VBA-programmeur kunt b<strong>en</strong>utt<strong>en</strong>.<br />

Mogelijkhed<strong>en</strong> om eig<strong>en</strong> dialoogv<strong>en</strong>sters sam<strong>en</strong> te stell<strong>en</strong>.<br />

<strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> direct in e<strong>en</strong> werkblad te gebruik<strong>en</strong>.<br />

Interactie met de gebruiker.<br />

Gegev<strong>en</strong>s uit e<strong>en</strong> dialoogv<strong>en</strong>ster overbr<strong>en</strong>g<strong>en</strong> naar e<strong>en</strong> werkblad.


Wat leert u in dit hoofdstuk?<br />

Ingebouwd dialoogv<strong>en</strong>ster b<strong>en</strong>utt<strong>en</strong>.<br />

De werkbalk <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong>.<br />

E<strong>en</strong> ‘Userform’.


MACRO’S EN VBA IN EXCEL de basis<br />

11.1 Ingebouwde dialoogv<strong>en</strong>sters<br />

De ingebouwde dialoogv<strong>en</strong>sters van Excel k<strong>en</strong>t u zeer waarschijnlijk al. Als u bijvoorbeeld<br />

in het m<strong>en</strong>u Opmaak de optie Celeig<strong>en</strong>schapp<strong>en</strong> kiest <strong>en</strong> e<strong>en</strong> van de tabblad<strong>en</strong><br />

selecteert, ziet u zo’n dialoogv<strong>en</strong>ster; zie afbeelding 11.1<br />

Afbeelding 11.1<br />

Het dialoogv<strong>en</strong>ster Celeig<strong>en</strong>schapp<strong>en</strong>, tabblad Uitlijning.<br />

In VBA kunt u zo’n dialoogv<strong>en</strong>ster ook makkelijk oproep<strong>en</strong>, maar het ziet er dan wel<br />

iets anders uit. Lat<strong>en</strong> we dit e<strong>en</strong>s prober<strong>en</strong> met e<strong>en</strong> eerste oef<strong>en</strong>ing.<br />

Oef<strong>en</strong>ing 11.1<br />

Ingebouwd dialoogv<strong>en</strong>ster oproep<strong>en</strong><br />

1 Op<strong>en</strong> e<strong>en</strong> lege map.<br />

2 Ga naar de VBA-editor <strong>en</strong> voeg e<strong>en</strong> module toe.<br />

3 Neem de volg<strong>en</strong>de procedure over in de module:<br />

C Sub Dialoogv<strong>en</strong>sters_1()<br />

Application.Dialogs(xlDialogAlignm<strong>en</strong>t).Show<br />

End Sub<br />

4 Klik in de regel Application…<strong>en</strong> start de uitvoering van de macro met F5. Afbeelding 11.2 geeft<br />

het dialoogv<strong>en</strong>ster weer met slechts dat <strong>en</strong>e tabblad.<br />

262


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

Afbeelding 11.2<br />

Het dialoogv<strong>en</strong>ster Uitlijning.<br />

5 U mag ook met e<strong>en</strong> objectvariabele werk<strong>en</strong>, dan ziet het er zo uit:<br />

C Dim dlgD As Dialog<br />

Set dlgD = Application.Dialogs(xlDialogAlignm<strong>en</strong>t)<br />

With dlgD<br />

.Show<br />

End With<br />

De vraag is nu hoe we de door de gebruiker te kiez<strong>en</strong> informatie aan het dialoogv<strong>en</strong>ster<br />

kunn<strong>en</strong> ontfutsel<strong>en</strong>. Welnu, dat hóeft helemaal niet! Als u vanuit e<strong>en</strong> macro e<strong>en</strong><br />

dialoog laat verschijn<strong>en</strong>, word<strong>en</strong> e<strong>en</strong>voudig direct de gemaakte keuzes toegepast op de<br />

geselecteerde cell<strong>en</strong>.<br />

Elk ingebouwd dialoogv<strong>en</strong>ster bezit tal van parameters. Deze kunt u in de Help vind<strong>en</strong><br />

als u zoekt naar Dialog Object <strong>en</strong> dan op de helppagina klikt op Lijst van argum<strong>en</strong>t<strong>en</strong><br />

voor ingebouwde dialoogv<strong>en</strong>sters. In de lijst zijn tev<strong>en</strong>s alle constant<strong>en</strong> te vind<strong>en</strong> voor<br />

de ingebouwde dialoogv<strong>en</strong>sters.<br />

Veel argum<strong>en</strong>t<strong>en</strong> zijn niet instelbaar, maar soms is dat wel het geval, bijvoorbeeld bij<br />

het dialoogv<strong>en</strong>ster Op<strong>en</strong><strong>en</strong> dat de volg<strong>en</strong>de argum<strong>en</strong>t<strong>en</strong> k<strong>en</strong>t: file_text, update_links,<br />

read_only, format, prot_pwd, write_res_pwd, ignore_rorec, file_origin, custom_delimit,<br />

add_logical, editable, file_access, notify_logical, converter. Deze argum<strong>en</strong>t<strong>en</strong> zijn<br />

g<strong>en</strong>ummerd: file_text is argum<strong>en</strong>t nummer 1, read_only is argum<strong>en</strong>t 3. Als u de macro<br />

sam<strong>en</strong>stelt zoals hierna is aangegev<strong>en</strong>, dan zult u ook zi<strong>en</strong> dat als u de Show-methode<br />

invoert, VBA reageert met de lijst die u in afbeelding 11.3 ziet<br />

263


MACRO’S EN VBA IN EXCEL de basis<br />

Afbeelding 11.3<br />

De argum<strong>en</strong>t<strong>en</strong>lijst van de methode Show.<br />

Het is e<strong>en</strong> beetje omslachtig in VBA dat we deze argum<strong>en</strong>t<strong>en</strong> gewoon moet<strong>en</strong> aftell<strong>en</strong>.<br />

U mag dus schrijv<strong>en</strong>:<br />

blnR = .Show(arg3:=True) of<br />

blnR = .Show(, , True)<br />

In het laatste geval moet u g<strong>en</strong>oeg komma’s zett<strong>en</strong> om daarmee aan te gev<strong>en</strong> dat u<br />

het derde argum<strong>en</strong>t de waarde True wilt gev<strong>en</strong>. De elders in VBA wel geaccepteerde<br />

schrijfwijze met b<strong>en</strong>oemde argum<strong>en</strong>t<strong>en</strong>, levert hier e<strong>en</strong> foutmelding op. Het is grappig<br />

om te zi<strong>en</strong> dat wat dit betreft, e<strong>en</strong> - overig<strong>en</strong>s ook weinig gebruikt - deel van de programmeertaal<br />

niet af is:<br />

blnR = .Show(read_only:=True)<br />

Wilt u e<strong>en</strong> gebruiker dit dialoogv<strong>en</strong>ster ton<strong>en</strong> met als vaste waarde om e<strong>en</strong> bestand<br />

alle<strong>en</strong> als read-only oftewel alle<strong>en</strong>-lez<strong>en</strong> te op<strong>en</strong><strong>en</strong>, dan moet dat zo:<br />

Oef<strong>en</strong>ing 11.2<br />

Parameter ingebouwd dialoogv<strong>en</strong>ster instell<strong>en</strong><br />

1 Neem de volg<strong>en</strong>de procedure over:<br />

C Sub Dialoogv<strong>en</strong>sters_2()<br />

Dim blnR As Boolean<br />

Dim dlgD As Dialog<br />

Set dlgD = Application.Dialogs.Item(xlDialogOp<strong>en</strong>)<br />

264


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

With dlgD<br />

blnR = .Show(arg3:=True)<br />

End With<br />

If Not (blnR) Th<strong>en</strong><br />

MsgBox "De gebruiker heeft op annuler<strong>en</strong> gedrukt"<br />

End If<br />

End Sub<br />

2 Start de procedure.<br />

3 Selecteer e<strong>en</strong> bestand in het dialoogv<strong>en</strong>ster Op<strong>en</strong><strong>en</strong> <strong>en</strong> klik op de knop Op<strong>en</strong><strong>en</strong>.<br />

4 Vergelijk uw resultaat met dat van afbeelding 11.4 <strong>en</strong> controleer of het geop<strong>en</strong>de bestand in de<br />

Excel-titelbalk de aanduiding [Alle<strong>en</strong> lez<strong>en</strong>] gekreg<strong>en</strong> heeft.<br />

Afbeelding 11.4<br />

E<strong>en</strong> bestand is als ‘alle<strong>en</strong> lez<strong>en</strong>’ geop<strong>en</strong>d.<br />

Waarom zoud<strong>en</strong> we ons toch met deze dialoogv<strong>en</strong>sters bezighoud<strong>en</strong>? Het is bijvoorbeeld<br />

mogelijk om de totale Excel-interface weg te hal<strong>en</strong> (zie hoofdstuk 12) <strong>en</strong> alle<strong>en</strong><br />

díe dialog<strong>en</strong> aan de gebruiker voor te schotel<strong>en</strong> waarvan u wilt dat ze gebruikt kunn<strong>en</strong><br />

word<strong>en</strong>. Het mooie aan het vorige voorbeeld is dat de gebruiker bij het kiez<strong>en</strong> <strong>en</strong><br />

op<strong>en</strong><strong>en</strong> van het bestand helemaal ge<strong>en</strong> indicatie krijgt dat het bestand als alle<strong>en</strong> lez<strong>en</strong><br />

geop<strong>en</strong>d wordt.<br />

11.2 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong><br />

<strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> zijn onderdel<strong>en</strong> die normaal in dialoogv<strong>en</strong>sters aangetroff<strong>en</strong><br />

word<strong>en</strong>. Voorbeeld<strong>en</strong> van deze elem<strong>en</strong>t<strong>en</strong> zijn: knopp<strong>en</strong>, lijst<strong>en</strong>, keuzevakjes <strong>en</strong> keuzerondjes<br />

In tabel 11.1 ziet u e<strong>en</strong> compleet overzicht van de besturingselem<strong>en</strong>t<strong>en</strong> die<br />

u in Excel <strong>en</strong> VBA kunt toepass<strong>en</strong>.<br />

265


MACRO’S EN VBA IN EXCEL de basis<br />

Tabel 11.1<br />

Overzicht van besturingselem<strong>en</strong>t<strong>en</strong><br />

Afbeelding Besturingselem<strong>en</strong>t VBA b<strong>en</strong>aming Toepassing<br />

Selectievakje CheckBox Voor het pres<strong>en</strong>ter<strong>en</strong> van niet-unieke keuzes.<br />

Er kan bijvoorbeeld gekoz<strong>en</strong> word<strong>en</strong> voor Vet<br />

<strong>en</strong> Cursief, e<strong>en</strong> van beid<strong>en</strong> of ge<strong>en</strong> van beid<strong>en</strong>.<br />

Tekstvak TextBox E<strong>en</strong> kader waar tekst ingevoerd kan word<strong>en</strong><br />

door de gebruiker of via programmacode.<br />

Keuzerondje OptionButton Keuzerondjes staan altijd in groep<strong>en</strong> bij elkaar<br />

<strong>en</strong> word<strong>en</strong> gebruikt voor het pres<strong>en</strong>ter<strong>en</strong> van<br />

keuzes die elkaar uitsluit<strong>en</strong>. U kunt bijvoorbeeld<br />

kiez<strong>en</strong> voor ligg<strong>en</strong>d of staand afdrukk<strong>en</strong>, maar<br />

niet voor beide.<br />

Knop CommandButton E<strong>en</strong> drukknop zoals we die in talloze dialog<strong>en</strong><br />

aantreff<strong>en</strong>, met als meest bek<strong>en</strong>de voorbeeld<br />

de Annuler<strong>en</strong>-knop.<br />

Keuzelijst ListBox E<strong>en</strong> kader waarin e<strong>en</strong> lijstje met mogelijkhed<strong>en</strong><br />

gepres<strong>en</strong>teerd kan word<strong>en</strong>. Afhankelijk van de<br />

instelling<strong>en</strong> kan de gebruiker uit de lijst e<strong>en</strong> of<br />

meer mogelijkhed<strong>en</strong> kiez<strong>en</strong>. De keuzelijst heeft<br />

vaste afmeting<strong>en</strong>.<br />

Keuzelijst met<br />

invoervak<br />

ComboBox<br />

Dit is e<strong>en</strong> combinatie van e<strong>en</strong> e<strong>en</strong>regelig<br />

tekstvak <strong>en</strong> e<strong>en</strong> lijst. Naast het tekstvak dat hier<br />

aangeduid wordt met invoervak vind<strong>en</strong> we e<strong>en</strong><br />

m<strong>en</strong>usymbool Als de gebruiker hierop klikt valt<br />

de lijst op<strong>en</strong> <strong>en</strong> toont de beschikbare keuzes.<br />

Het is mogelijk dat de gebruiker items aan de<br />

lijst toevoegt omdat in het invoervak iets getypt<br />

kan word<strong>en</strong>. Via wat programmacode kan het<br />

getypte aan de lijst toegevoegd word<strong>en</strong>.<br />

WisselKnop ToggleButton Wisselt tuss<strong>en</strong> twee toestand<strong>en</strong>.<br />

Kringveld Spinbutton Klein knopje met twee pijltjes die omhoog <strong>en</strong><br />

omlaag wijz<strong>en</strong>. Erop klikk<strong>en</strong> doet meestal e<strong>en</strong><br />

waarde op- of weer aflop<strong>en</strong>.<br />

Schuifbalk ScrollBar De bek<strong>en</strong>de schuiv<strong>en</strong> die u ook in Excel rechts<br />

<strong>en</strong> onderaan in e<strong>en</strong> docum<strong>en</strong>tv<strong>en</strong>ster ziet.<br />

Label Label E<strong>en</strong> label wordt gebruikt om verklar<strong>en</strong>de<br />

tekst<strong>en</strong> bij andere besturingselem<strong>en</strong>t<strong>en</strong> te<br />

zett<strong>en</strong> of om e<strong>en</strong>voudige mededeling<strong>en</strong> aan de<br />

gebruiker te do<strong>en</strong>.<br />

Afbeelding Image E<strong>en</strong> kader dat u kunt gebruik<strong>en</strong> om afbeelding<strong>en</strong><br />

in te plaats<strong>en</strong>.<br />

266


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

Afbeelding 11.5<br />

Alle gangbare besturingselem<strong>en</strong>t<strong>en</strong> in e<strong>en</strong> werkblad getek<strong>en</strong>d.<br />

In afbeelding 11.5 ziet u <strong>en</strong>kele belangrijke onderdel<strong>en</strong>:<br />

Rechtsonder de werkbalk <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong>.<br />

Alle gangbare besturingselem<strong>en</strong>t<strong>en</strong> die op deze werkbalk te vind<strong>en</strong> zijn, zijn in<br />

dezelfde volgorde als ze op de werkbalk hebb<strong>en</strong>, in het werkblad getek<strong>en</strong>d.<br />

Bij besturingselem<strong>en</strong>t<strong>en</strong> waarvan de VBA-b<strong>en</strong>aming niet in het elem<strong>en</strong>t g<strong>en</strong>oemd<br />

wordt, is e<strong>en</strong> kader geplaatst waarin u de naam kunt aflez<strong>en</strong>. Deze naam is via tabel<br />

11.1 te herleid<strong>en</strong> naar de b<strong>en</strong>aming op de tooltips van werkbalk.<br />

Rechtsbov<strong>en</strong> het dialoogv<strong>en</strong>ster Eig<strong>en</strong>schapp<strong>en</strong> waarmee u elk individueel besturingselem<strong>en</strong>t<br />

kunt instell<strong>en</strong>. De eig<strong>en</strong>schapp<strong>en</strong> van de CommandButton word<strong>en</strong><br />

weergegev<strong>en</strong> omdat deze geselecteerd is.<br />

Er is wel e<strong>en</strong> bepaalde volgorde die u di<strong>en</strong>t aan te houd<strong>en</strong> om succesvol met besturingselem<strong>en</strong>t<strong>en</strong><br />

te kunn<strong>en</strong> werk<strong>en</strong>:<br />

1 Zet de werkbalk <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> op het scherm via het m<strong>en</strong>u<br />

Beeld,Werkbalk<strong>en</strong>;<br />

2 Klik op de knop Ontwerpmodus;<br />

267


MACRO’S EN VBA IN EXCEL de basis<br />

3 Selecteer e<strong>en</strong> besturingselem<strong>en</strong>t <strong>en</strong> tek<strong>en</strong> het op het werkblad op dezelfde manier<br />

zoals u met e<strong>en</strong> tek<strong>en</strong>programma werkt.<br />

4 Klik op de knop Eig<strong>en</strong>schapp<strong>en</strong> om de k<strong>en</strong>merk<strong>en</strong> van het getek<strong>en</strong>de elem<strong>en</strong>t in<br />

te kunn<strong>en</strong> stell<strong>en</strong>;<br />

5 Klik op de knop Programmacode weergev<strong>en</strong> om bij de standaardgebeurt<strong>en</strong>is te<br />

kom<strong>en</strong> dat bij het besturingselem<strong>en</strong>t hoort. Indi<strong>en</strong> nodig voegt u daar de gew<strong>en</strong>ste<br />

programmacode toe of verwijst u naar e<strong>en</strong> procedure (macro) die uitgevoerd moet<br />

word<strong>en</strong>.<br />

11.2.1 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> in e<strong>en</strong> werkblad<br />

Het plaats<strong>en</strong> van besturingselem<strong>en</strong>t<strong>en</strong> in het werkblad is e<strong>en</strong> vrij e<strong>en</strong>voudige procedure.<br />

Volg deze stapp<strong>en</strong> om e<strong>en</strong> besturingselem<strong>en</strong>t in het werkblad te plaats<strong>en</strong>, de<br />

eig<strong>en</strong>schapp<strong>en</strong> ervan in te stell<strong>en</strong> <strong>en</strong> er e<strong>en</strong> macro aan te koppel<strong>en</strong>.<br />

De macro die bij e<strong>en</strong> besturingselem<strong>en</strong>t hoort, wordt in e<strong>en</strong> specifieke procedure geplaatst<br />

die e<strong>en</strong> gebeurt<strong>en</strong>isprocedure of ev<strong>en</strong>t g<strong>en</strong>oemd wordt; daarover in paragraaf<br />

11.2.3 meer.<br />

Oef<strong>en</strong>ing 11.3<br />

Besturingselem<strong>en</strong>t in e<strong>en</strong> werkblad plaats<strong>en</strong><br />

1 Selecteer e<strong>en</strong> leeg werkblad.<br />

2 Kies in het m<strong>en</strong>u Beeld,Werkbalk<strong>en</strong> <strong>en</strong> selecteer in het uitvouwm<strong>en</strong>u Werkset <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong>;<br />

zie afbeelding 11.6.<br />

3 Klik op de knop Opdrachtknop <strong>en</strong> trek erg<strong>en</strong>s op het werkblad e<strong>en</strong> kader. Als u de muisknop los<br />

laat, tovert Excel e<strong>en</strong> knopje op de plaats van het kader; zie afbeelding 11.7.<br />

Het is belangrijk dat u ev<strong>en</strong> goed naar de werkbalk Werkset <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> kijkt. De<br />

knop Ontwerpmodus heet nu Ontwerpmodus afsluit<strong>en</strong>. Dit verschil lijkt klein, maar de effect<strong>en</strong><br />

zijn groot. Zie hiervoor ook tabel 11.2.<br />

268


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

Afbeelding 11.6<br />

De werkbalk Werkset <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> op het scherm zett<strong>en</strong><br />

Afbeelding 11.7<br />

E<strong>en</strong> knop in het werkblad<br />

269


MACRO’S EN VBA IN EXCEL de basis<br />

Tabel 11.2<br />

Instelling<strong>en</strong> van de Ontwerpmodus<br />

Pictogram Knop naam Effect<br />

Ontwerpmodus<br />

<strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> in e<strong>en</strong> werkblad kunn<strong>en</strong> gebruikt<br />

word<strong>en</strong> voor het doel waarvoor ze ontworp<strong>en</strong> zijn. De knop<br />

kan nu bijvoorbeeld met de muis ingedrukt word<strong>en</strong>.<br />

ONTBREEKT><br />

***knop-ontwerpmodusafsluit<strong>en</strong>.jpg<br />

Ontwerpmodus afsluit<strong>en</strong><br />

Nu kunt u elk besturingselem<strong>en</strong>t in het werkblad selecter<strong>en</strong>,<br />

de afmeting<strong>en</strong> aanpass<strong>en</strong>, het elem<strong>en</strong>t verslep<strong>en</strong>,<br />

eig<strong>en</strong>schapp<strong>en</strong> instell<strong>en</strong> <strong>en</strong> er e<strong>en</strong> macro aan koppel<strong>en</strong>.<br />

4 Het besturingselem<strong>en</strong>t kan verplaatst word<strong>en</strong> door de muiscursor er midd<strong>en</strong> op zett<strong>en</strong> <strong>en</strong> het te<br />

verslep<strong>en</strong>.<br />

5 Het aanpass<strong>en</strong> van de afmeting<strong>en</strong> gebeurt door e<strong>en</strong> handvat te verslep<strong>en</strong>.<br />

6 Klik in de werkbalk Werkset <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> op de knop Ontwerpmodus afsluit<strong>en</strong>.<br />

7 Klik nu met de muis op de knop die in het werkblad getek<strong>en</strong>d is. U ziet dat de knop nu ‘ingedrukt’<br />

wordt. Er gebeurt echter nog niets omdat we er nog e<strong>en</strong> macro aan moet<strong>en</strong> koppel<strong>en</strong>. Bov<strong>en</strong>di<strong>en</strong><br />

moet de standaardtekst op de knop vervang<strong>en</strong> word<strong>en</strong>. We kunn<strong>en</strong> dit do<strong>en</strong> door de eig<strong>en</strong>schapp<strong>en</strong><br />

van dit besturingselem<strong>en</strong>t aan te pass<strong>en</strong>.<br />

11.2.2 Eig<strong>en</strong>schapp<strong>en</strong> van e<strong>en</strong> besturingselem<strong>en</strong>t instell<strong>en</strong><br />

Eerst word<strong>en</strong> de eig<strong>en</strong>schapp<strong>en</strong> van het besturingselem<strong>en</strong>t ingesteld. Afhankelijk van<br />

het type besturingselem<strong>en</strong>t, zijn er per elem<strong>en</strong>t soms wel ti<strong>en</strong>tall<strong>en</strong> eig<strong>en</strong>schapp<strong>en</strong>. In<br />

tabel 11.3 zijn e<strong>en</strong> aantal veelgebruikte eig<strong>en</strong>schapp<strong>en</strong> van de knop op e<strong>en</strong> rijtje gezet<br />

om e<strong>en</strong> idee te gev<strong>en</strong>.<br />

Er is één eig<strong>en</strong>schap die uitermate belangrijk is bij het werk<strong>en</strong> met besturingselem<strong>en</strong>t<strong>en</strong><br />

<strong>en</strong> dat is de eig<strong>en</strong>schap Name. De Name property bepaalt de naam waaronder het<br />

elem<strong>en</strong>t binn<strong>en</strong> de macro bek<strong>en</strong>d is. Het is namelijk vaak nodig om ook in e<strong>en</strong> macro<br />

e<strong>en</strong> besturingselem<strong>en</strong>t aan te kunn<strong>en</strong> sprek<strong>en</strong>. U kunt daar verder in dit hoofdstuk<br />

e<strong>en</strong> voorbeeld van zi<strong>en</strong>. Belangrijk is dat u de Name property altijd opgeeft. Laat u<br />

dit na, dan krijgt het besturingselem<strong>en</strong>t e<strong>en</strong> g<strong>en</strong>erieke naam op het mom<strong>en</strong>t dat het<br />

getek<strong>en</strong>d wordt. In dit geval is dat CommandButton1. U ziet deze naam ook op de<br />

270


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

knop staan. Wellicht verwarr<strong>en</strong>d, maar het opschrift van de knop wordt weer door e<strong>en</strong><br />

andere eig<strong>en</strong>schap bepaald, namelijk de eig<strong>en</strong>schap Caption. VBA (of zo u wilt: Excel)<br />

maakt de caption van e<strong>en</strong> knop echter standaard id<strong>en</strong>tiek aan de g<strong>en</strong>erieke naam.<br />

Oef<strong>en</strong>ing 11.4<br />

Eig<strong>en</strong>schapp<strong>en</strong> van e<strong>en</strong> besturingselem<strong>en</strong>t vind<strong>en</strong><br />

1 Klik in de werkbalk Werkset <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> op de knop Ontwerpmodus.<br />

2 Selecteer de eerder aangemaakte CommandButton1-knop of maak deze alsnog aan. U ziet nu<br />

de handvat<strong>en</strong> verschijn<strong>en</strong>.<br />

3 Klik op de werkbalk op de knop Eig<strong>en</strong>schapp<strong>en</strong>. Het gelijknamige v<strong>en</strong>ster verschijnt.<br />

4 Bekijk de inhoud; er moet<strong>en</strong> vijf<strong>en</strong>twintig eig<strong>en</strong>schapp<strong>en</strong> zijn die alle bij de commandbutton<br />

hor<strong>en</strong>.<br />

5 Bekijk tabel 11.3 voor e<strong>en</strong> uitleg van de eig<strong>en</strong>schapp<strong>en</strong>.<br />

Tabel 11.4<br />

Eig<strong>en</strong>schap<br />

(Name)<br />

Accelerator<br />

AutoSize<br />

BackColor<br />

BackStyle<br />

Caption<br />

Enabled<br />

Eig<strong>en</strong>schapp<strong>en</strong> van de knop (CommandButton)<br />

Functie<br />

Bepaalt de naam van e<strong>en</strong> besturingselem<strong>en</strong>t zoals het in de programmacode bek<strong>en</strong>d<br />

zal staan.<br />

E<strong>en</strong> van de letters van het opschrift van de knop. De knop kan dan ook ’ingedrukt’<br />

word<strong>en</strong> met de toets<strong>en</strong>combinatie Alt + deze letter. Kies e<strong>en</strong> letter die niet als Accelerator<br />

in e<strong>en</strong> van de m<strong>en</strong>u’s gebruikt wordt!<br />

De afmeting van het besturingselem<strong>en</strong>t wordt automatisch aangepast aan de<br />

hoeveelheid gegev<strong>en</strong>s als de waarde True aangegev<strong>en</strong> wordt. Voor de knop betek<strong>en</strong>t<br />

dat aanpassing van de afmeting aan de hoeveel tekst van de eig<strong>en</strong>schap Caption.<br />

De achtergrondkleur. Deze eig<strong>en</strong>schap geeft twee palett<strong>en</strong>: Palet <strong>en</strong> Systeem. Via<br />

Palet kunt u willekeurige kleur<strong>en</strong> kiez<strong>en</strong>, via de keuze Systeem alle<strong>en</strong> Windows systeem<br />

kleur<strong>en</strong> die in te stell<strong>en</strong> zijn via het configuratiescherm.<br />

Knopp<strong>en</strong> kunn<strong>en</strong> opaque (ondoorzichtig) of transparant zijn.<br />

Dit is het opschrift op de knop.<br />

E<strong>en</strong> eig<strong>en</strong>schap die bepaald of e<strong>en</strong> knop ingedrukt kan word<strong>en</strong> of niet. Soms is het<br />

nodig e<strong>en</strong> knop (tijdelijk) uit te schakel<strong>en</strong> tot de gebruiker e<strong>en</strong> bepaalde handeling<br />

verricht of e<strong>en</strong> bepaald gegev<strong>en</strong> verstrekt heeft. Dat kan met Knop.Enabled =<br />

False. Aanzett<strong>en</strong> gebeurt met Knop.Enabled = True.<br />

271


MACRO’S EN VBA IN EXCEL de basis<br />

Eig<strong>en</strong>schap<br />

ForeColor<br />

Height<br />

Left<br />

Locked<br />

MouseIcon<br />

MousePointer<br />

Picture<br />

PicturePosition<br />

Placem<strong>en</strong>t<br />

PrintObject<br />

Shadow<br />

TakeFocusOnClick<br />

Top<br />

Functie<br />

De kleur van het opschrift op de knop.<br />

De hoogte van de knop opgegev<strong>en</strong> in pixels.<br />

De positie in het werkblad of het formulier t<strong>en</strong> opzichte van de linkerrand. Zie paragraaf<br />

?? voor het werk<strong>en</strong> met formulier<strong>en</strong>.<br />

Bepaalt met de booleaanse waard<strong>en</strong> True <strong>en</strong> False of e<strong>en</strong> besturingselem<strong>en</strong>t bewerkt<br />

kan word<strong>en</strong> of niet.<br />

Kies e<strong>en</strong> bepaalde afbeelding die verschijnt als u met de muis bov<strong>en</strong> de knop komt én<br />

als de volg<strong>en</strong>de eig<strong>en</strong>schap hierna ingesteld wordt op 99-frmMousePointerCustom.<br />

Kies e<strong>en</strong> van de ingebouwde muiscursors of de waarde 99-frmMousePointerCustom<br />

als u bij de vorige eig<strong>en</strong>schap e<strong>en</strong> afbeelding hebt opgegev<strong>en</strong>.<br />

Zet e<strong>en</strong> afbeelding op de knop. Vaak word<strong>en</strong> hiervoor pictogramm<strong>en</strong> gebruikt.<br />

Plek van de afbeelding.<br />

Bepaalt hoe het object zich gedraagt t<strong>en</strong> opzichte van de onderligg<strong>en</strong>de cell<strong>en</strong>.<br />

Bij het afdrukk<strong>en</strong> van e<strong>en</strong> werkblad bepaalt de waarde in deze eig<strong>en</strong>schap of de knop<br />

mee afgedrukt wordt (True) of niet (False).<br />

Geeft met de waarde True e<strong>en</strong> schaduw onder de knop.<br />

Indi<strong>en</strong> er meer elem<strong>en</strong>t<strong>en</strong> in het werkblad ligg<strong>en</strong>, kan dit elem<strong>en</strong>t de focus krijg<strong>en</strong> als<br />

er op geklikt wordt. E<strong>en</strong> knop die de ’focus‘ heeft is te herk<strong>en</strong>n<strong>en</strong> aan het stippellijntje<br />

rond het opschrift op de knop.E<strong>en</strong> knop met focus kan ook geactiveerd word<strong>en</strong> met de<br />

spatiebalk of de Enter-toets. Hebt u e<strong>en</strong> textbox <strong>en</strong> e<strong>en</strong> knop in het werkblad <strong>en</strong> wilt u<br />

dat de textbox altijd geselecteerd blijft, ook al wordt er op de knop geklikt, dan geeft u<br />

deze property voor de knop de waarde False <strong>en</strong> voor de Textbox de waarde True.<br />

De afstand van de knop tot de bov<strong>en</strong>zijde van het werkblad.<br />

Visible Met Visible = True is de knop zichtbaar in het werkblad, met Visible =<br />

False is de knop er wel, maar niet zichtbaar. E<strong>en</strong> knop die onzichtbaar is, kunt u<br />

vanuit e<strong>en</strong> macro wél b<strong>en</strong>ader<strong>en</strong> om bijvoorbeeld het opschrift te wijzig<strong>en</strong>.<br />

Width<br />

WordWrap<br />

De breedte van de knop uitgedrukt in pixels.<br />

Met de waarde True kunt u meer regels kwijt in e<strong>en</strong> elem<strong>en</strong>t. Voor het opschrift op<br />

e<strong>en</strong> knop wellicht niet zo heel interessant, maar bijvoorbeeld wel voor e<strong>en</strong> textbox als<br />

u de gebruiker de mogelijkheid wilt gev<strong>en</strong> meer regels tekst in te voer<strong>en</strong>.<br />

Oef<strong>en</strong>ing 11.5<br />

Eig<strong>en</strong>schapp<strong>en</strong> van e<strong>en</strong> besturingselem<strong>en</strong>t instell<strong>en</strong><br />

Het instell<strong>en</strong> van de eig<strong>en</strong>schapp<strong>en</strong> is erg e<strong>en</strong>voudig omdat u van de meeste eig<strong>en</strong>schapp<strong>en</strong> direct<br />

het effect ziet. Microsoft stopt soms <strong>en</strong>orm veel cosmetische zak<strong>en</strong> in de software <strong>en</strong> daarvan zi<strong>en</strong><br />

we vooral ook hier het directe resultaat. Enkele eig<strong>en</strong>schapp<strong>en</strong> zijn natuurlijk erg belangrijk.<br />

1 Selecteer de knop indi<strong>en</strong> dit nodig is.<br />

272


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

2 Geef als Name-property cmdKnop.<br />

3 De Accelerator wordt f.<br />

4 De Caption wordt Afsluit<strong>en</strong>. U ziet e<strong>en</strong> streepje verschijn<strong>en</strong> onder de letter f; dat is de accelerator<br />

Hierdoor kan de knop ook ingedrukt word<strong>en</strong> met Alt + f. Dit is ook bek<strong>en</strong>d als de sneltoets.<br />

5 Experim<strong>en</strong>teer zelf met verschill<strong>en</strong>de andere eig<strong>en</strong>schapp<strong>en</strong> om er e<strong>en</strong> gevoel voor te krijg<strong>en</strong>.<br />

Van sommige eig<strong>en</strong>schapp<strong>en</strong> zoals Enabled ziet u pas het effect als u in de werkbalk Werkset<br />

<strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> eerst op de knop Ontwerpmodus afsluit<strong>en</strong> klikt!<br />

6 Bekijk ook de werking van het tabblad Alfabetisch <strong>en</strong> Gecategoriseerd in het v<strong>en</strong>ster Eig<strong>en</strong>schapp<strong>en</strong>.<br />

HONGAARSE NOTATIE<br />

Het is e<strong>en</strong> goede gewoonte besturingselem<strong>en</strong>t<strong>en</strong> e<strong>en</strong> naam te gev<strong>en</strong> die begint met drie letters<br />

waaruit u kunt afleid<strong>en</strong> om welk type besturingselem<strong>en</strong>t het gaat, zoals:<br />

cmd voor CommandButton;<br />

txt voorTextBox;<br />

cmb voor ComboBox;<br />

scr voor ScrollBar.<br />

Elders in het boek hebt u gezi<strong>en</strong> dat ik die gewoonte ook toepas bij nam<strong>en</strong> van variabel<strong>en</strong>:<br />

int: Integer;<br />

lng: Long;<br />

str: String;<br />

var: Variant.<br />

De programmacode wordt daardoor beter leesbaar <strong>en</strong> u weet later als er onderhoud gepleegd<br />

moet word<strong>en</strong> onmiddellijk om welk type object of variabele het gaat. We noem<strong>en</strong> deze notatiewijze<br />

zo omdat naar verluidt e<strong>en</strong> Microsoft-programmeur van Hongaarse afkomst er mee op<br />

de propp<strong>en</strong> kwam.<br />

11.2.3 Gebeurt<strong>en</strong>isprocedures<br />

Als u e<strong>en</strong> besturingselem<strong>en</strong>t aan e<strong>en</strong> werkblad hebt toegevoegd, zal er nog ge<strong>en</strong> actie<br />

aan gekoppeld zijn. Om wel iets te lat<strong>en</strong> gebeur<strong>en</strong>, moet<strong>en</strong> we e<strong>en</strong> macro programmer<strong>en</strong><br />

of verwijz<strong>en</strong> naar e<strong>en</strong> bestaande macro. De vraag is: wanneer will<strong>en</strong> we dat er iets<br />

gebeurt? Daartoe moet<strong>en</strong> we eerst wet<strong>en</strong> wat de mogelijkhed<strong>en</strong> van het besturingselem<strong>en</strong>t<br />

zijn.<br />

273


MACRO’S EN VBA IN EXCEL de basis<br />

Elk besturingselem<strong>en</strong>t is standaard voorzi<strong>en</strong> van e<strong>en</strong> aantal uit te voer<strong>en</strong> gebeurt<strong>en</strong>iss<strong>en</strong>.<br />

Voor e<strong>en</strong> knop is dat bijvoorbeeld de klik op de knop wat tot het Click ev<strong>en</strong>t leidt.<br />

Dat is e<strong>en</strong> gebeurt<strong>en</strong>is waar de knop voor is uitgevond<strong>en</strong> <strong>en</strong> het is dan ook het standaard<br />

ev<strong>en</strong>t van dit besturingselem<strong>en</strong>t. Voor e<strong>en</strong> tekstvak is dat weer het Change ev<strong>en</strong>t,<br />

er verandert iets in het tekstvak. Elk besturingselem<strong>en</strong>t heeft zijn standaard ev<strong>en</strong>t,<br />

maar daarnaast ook nog <strong>en</strong>kele andere mogelijkhed<strong>en</strong>. Hoe kom<strong>en</strong> we bij de ev<strong>en</strong>ts<br />

van e<strong>en</strong> besturingselem<strong>en</strong>t?<br />

Oef<strong>en</strong>ing 11.6<br />

Gebeurt<strong>en</strong>iss<strong>en</strong> van e<strong>en</strong> besturingselem<strong>en</strong>t vind<strong>en</strong><br />

1 Zet Excel in de ontwerpmodus door te klikk<strong>en</strong> op de knop Ontwerpmodus in de werkbalk Werkset<br />

<strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong>.<br />

2 Selecteer de knop.<br />

3 Klik op de werkbalk op de knop Programmacode weergev<strong>en</strong>. Dubbel klikk<strong>en</strong> op de knop mag<br />

ook.<br />

De VBA-editor verschijnt automatisch. Het blad waar de knop aangemaakt is wordt geselecteerd<br />

<strong>en</strong> het standaard ev<strong>en</strong>t wordt klaar gezet. U ziet dan ook de procedure die aangemaakt is:<br />

Private Sub cmdKnop_Click()<br />

End Sub<br />

U herk<strong>en</strong>t de Name property (cmdKnop), de naam van het ev<strong>en</strong>t (Click) <strong>en</strong> de aanduiding voor<br />

e<strong>en</strong> procedure die van het type Private is wat wil zegg<strong>en</strong> dat de procedure alle<strong>en</strong> bek<strong>en</strong>d is binn<strong>en</strong><br />

deze werkmap.<br />

Als u afbeelding 11.8 bekijkt, ziet u dat het vak Procedure geop<strong>en</strong>d is waar alle andere<br />

beschikbare ev<strong>en</strong>ts voor dit besturingselem<strong>en</strong>t te zi<strong>en</strong> zijn. Er zijn er derti<strong>en</strong>. Voor e<strong>en</strong><br />

ander type besturingselem<strong>en</strong>t kunn<strong>en</strong> er andere ev<strong>en</strong>ts zijn, hoewel er bijvoorbeeld<br />

wel bepaalde gebeurt<strong>en</strong>iss<strong>en</strong> door verschill<strong>en</strong>de besturingselem<strong>en</strong>t<strong>en</strong> gedeeld word<strong>en</strong>.<br />

Zo zijn er verschill<strong>en</strong>de besturingselem<strong>en</strong>t<strong>en</strong> waarbij er e<strong>en</strong> Click-ev<strong>en</strong>t optreedt als<br />

er met de muis op geklikt wordt. In tabel 11.5 zijn de ev<strong>en</strong>ts van de command button<br />

gerubriceerd.<br />

274


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

Afbeelding 11.8<br />

Ev<strong>en</strong>ts van de command button.<br />

Tabel 11.5<br />

Ev<strong>en</strong>t<br />

BeforeDragOver<br />

Toepassing van ev<strong>en</strong>ts van de commandbutton<br />

Toepassing<br />

Treedt op net op het mom<strong>en</strong>t dat de muis over het object bewog<strong>en</strong> wordt. Dit ev<strong>en</strong>t<br />

heeft e<strong>en</strong> gecompliceerde structuur met verschill<strong>en</strong>de parameters:<br />

Private Sub object_BeforeDragOver( ByVal Cancel As MSForms.ReturnBoolean,<br />

ByVal gegev<strong>en</strong>s As DataObject, ByVal X As Single, ByVal Y As Single, ByVal<br />

DragState As fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As<br />

fmShiftState). U herk<strong>en</strong>t onder meer de positiegegev<strong>en</strong>s van de muiscursor in X <strong>en</strong> Y,<br />

<strong>en</strong> Shift waarmee bepaald wordt welke toets (Ctrl, Shift of Alt) er tijd<strong>en</strong>s het slep<strong>en</strong><br />

ingedrukt is. Daarmee krijg<strong>en</strong> we in Windows immers e<strong>en</strong> ander effect. De waarde<br />

in Dragstate bepaalt de positie bov<strong>en</strong> het object <strong>en</strong> gegev<strong>en</strong>s bepaalt het object dat<br />

gesleept wordt.<br />

BeforDropOrPaste<br />

Click<br />

DblClick<br />

Als de gebruiker op het punt staat gegev<strong>en</strong>s met de muis neer te zett<strong>en</strong> of te plakk<strong>en</strong><br />

in e<strong>en</strong> object. Ook hier vind<strong>en</strong> we vele parameters.<br />

Het standaard ev<strong>en</strong>t van de knop; er zijn ge<strong>en</strong> parameters.<br />

Het doubleclick ev<strong>en</strong>t treedt op als de gebruiker binn<strong>en</strong> e<strong>en</strong> halve seconde<br />

tweemaal op de muisknop drukt terwijl de muiscursor zich bov<strong>en</strong> de knop bevindt.<br />

275


MACRO’S EN VBA IN EXCEL de basis<br />

Ev<strong>en</strong>t<br />

Error<br />

GotFocus<br />

KeyDown<br />

KeyPress<br />

KeyUp<br />

LostFocus<br />

MouseDown<br />

MouseMove<br />

MouseUp<br />

Toepassing<br />

Er treedt e<strong>en</strong> fout op bij het besturingselem<strong>en</strong>t <strong>en</strong> er is ge<strong>en</strong> programmacode<br />

beschikbaar om naar terug te ker<strong>en</strong>. We zi<strong>en</strong> dit in elke willekeurige applicatie wel<br />

e<strong>en</strong>s waarbij meestal e<strong>en</strong> foutmelding verschijnt in de trant van ‘Er treedt e<strong>en</strong> fout<br />

op die niet door de applicatie verwerkt kan word<strong>en</strong>, neem contact op met de leverancier’.<br />

Als dit bij e<strong>en</strong> van uw macro’s gebeurt, b<strong>en</strong>t u de leverancier.<br />

Het besturingselem<strong>en</strong>t heeft de focus gekreg<strong>en</strong>. Deze gebeurt<strong>en</strong>is kunt u heel goed<br />

gebruik<strong>en</strong> bij bijvoorbeeld e<strong>en</strong> tekstvak waar e<strong>en</strong> gebruiker iets moet invull<strong>en</strong>. E<strong>en</strong><br />

veel voorkom<strong>en</strong>de waarde of e<strong>en</strong> waarde die e<strong>en</strong> relatie heeft met wat eerder<br />

ingevuld was, kunt u in dit ev<strong>en</strong>t dan alvast invull<strong>en</strong>. D<strong>en</strong>k bijvoorbeeld aan het invull<strong>en</strong><br />

van de plaatsnaam op basis van de eerder ingevulde postcode. Voor e<strong>en</strong> knop<br />

kunt u in dit ev<strong>en</strong>t bijvoorbeeld controler<strong>en</strong> of alle andere elem<strong>en</strong>t<strong>en</strong> wel de juiste<br />

informatie bevatt<strong>en</strong> <strong>en</strong> of er niets verget<strong>en</strong> is.<br />

Dit ev<strong>en</strong>t treedt op als e<strong>en</strong> toets op het toets<strong>en</strong>bord wordt ingedrukt terwijl het<br />

besturingselem<strong>en</strong>t de focus heeft.<br />

In het KeyPress ev<strong>en</strong>t krijg<strong>en</strong> we alle toets<strong>en</strong> binn<strong>en</strong> die word<strong>en</strong> ingedrukt. U kunt<br />

het ev<strong>en</strong>t bijvoorbeeld gebruik<strong>en</strong> om de invoer in e<strong>en</strong> tekstvak te controler<strong>en</strong> op het<br />

niveau van e<strong>en</strong> <strong>en</strong>kel tek<strong>en</strong>.<br />

Dit ev<strong>en</strong>t treedt op als e<strong>en</strong> ingedrukte toets op het toets<strong>en</strong>bord wordt losgelat<strong>en</strong><br />

terwijl het besturingselem<strong>en</strong>t de focus heeft.<br />

Het besturingselem<strong>en</strong>t verliest de focus. Dit ev<strong>en</strong>t is handig om de totale invoer in<br />

e<strong>en</strong> tekstvak te controler<strong>en</strong>.<br />

De muisknop wordt ingedrukt bov<strong>en</strong> het besturingselem<strong>en</strong>t. Ook hier e<strong>en</strong> gecompliceerde<br />

constructie: Private Sub Chart_MouseDown(ByVal Button As<br />

Long, _<br />

ByVal Shift As Long, ByVal X As Long, ByVal Y As Long).<br />

X <strong>en</strong> Y bevatt<strong>en</strong> de coördinat<strong>en</strong> van de muiscursor bov<strong>en</strong><br />

het besturingselem<strong>en</strong>t. Shift de tegelijkertijd ingedrukte<br />

toets op het toets<strong>en</strong>bord <strong>en</strong> Button bevat de ingedrukte<br />

muisknop.<br />

De muis wordt bov<strong>en</strong> het besturingselem<strong>en</strong>t verplaatst. Dit ev<strong>en</strong>t treedt ongeveer<br />

vijfti<strong>en</strong> maal per seconde op <strong>en</strong> de programmacode hierin is dan ook waanzinnig<br />

lastig foutloos te mak<strong>en</strong>…<br />

De muisknop wordt weer losgelat<strong>en</strong>.<br />

U hebt bij de bespreking van de ev<strong>en</strong>ts in de tabel gezi<strong>en</strong> dat er ook gerefereerd werd<br />

aan andere besturingselem<strong>en</strong>t<strong>en</strong>. <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> del<strong>en</strong> dan ook vaak verschill<strong>en</strong>de<br />

ev<strong>en</strong>ts.<br />

11.2.4 Gebeurt<strong>en</strong>is programmer<strong>en</strong><br />

Om succesvol e<strong>en</strong> gebeurt<strong>en</strong>isprocedure te kunn<strong>en</strong> programmer<strong>en</strong> is het noodzakelijk<br />

dat u zich eerst afvraagt wat de gebruiker met de besturingselem<strong>en</strong>t<strong>en</strong> zal do<strong>en</strong> die u<br />

in e<strong>en</strong> formulier of in het werkblad getek<strong>en</strong>d hebt. Houd er rek<strong>en</strong>ing mee dat gebrui-<br />

276


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

kers zeer onvoorspelbaar zijn <strong>en</strong> dat u dus met zoveel mogelijk ‘gebruikersdwaling<strong>en</strong>’<br />

rek<strong>en</strong>ing moet houd<strong>en</strong>.<br />

In de tweede plaats is het programmer<strong>en</strong> met behulp van ev<strong>en</strong>ts lastig omdat de volgorde<br />

waarin ze optred<strong>en</strong> door het besturingssysteem (Windows) bepaald wordt. Het is<br />

niet aan ú als programmeur om te bepal<strong>en</strong> in welke volgorde ze optred<strong>en</strong>. Het is zelfs<br />

zo dat als u in het <strong>en</strong>e ev<strong>en</strong>t iets programmeert dat van invloed is op e<strong>en</strong> ander besturingselem<strong>en</strong>t<br />

of object, er e<strong>en</strong> ket<strong>en</strong> van nieuwe ev<strong>en</strong>ts getriggerd kunn<strong>en</strong> word<strong>en</strong> die<br />

op hun beurt nieuwe ev<strong>en</strong>ts trigger<strong>en</strong>. Dit maakt het debugg<strong>en</strong>, het zoek<strong>en</strong> van fout<strong>en</strong><br />

e<strong>en</strong> ware uitdaging.<br />

Indi<strong>en</strong> u voor e<strong>en</strong> bepaald besturingselem<strong>en</strong>t wilt wet<strong>en</strong> welke ev<strong>en</strong>ts in welke volgorde<br />

optred<strong>en</strong>, kunt u dat het beste met de volg<strong>en</strong>de truc achterhal<strong>en</strong>. We nem<strong>en</strong> hierbij<br />

weer de knop als voorbeeld.<br />

Oef<strong>en</strong>ing 11.6<br />

Volgorde van gebeurt<strong>en</strong>iss<strong>en</strong><br />

1 Dubbelklik op de knop. Het Click ev<strong>en</strong>t wordt klaargezet.<br />

2 Typ in dit ev<strong>en</strong>t MsgBox "klik".<br />

3 Laat via het vak Procedure e<strong>en</strong> aantal andere ev<strong>en</strong>ts klaarzett<strong>en</strong> die u wilt onderzoek<strong>en</strong>.<br />

4 Typ hierin dezelfde coderegel waarbij u de tekst natuurlijk aanpast; zie afbeelding 11.9.<br />

5 Ga naar Excel <strong>en</strong> voeg e<strong>en</strong> extra knop toe zodat de focus verschov<strong>en</strong> kan word<strong>en</strong>.<br />

6 Voer allerlei handeling<strong>en</strong> uit; u ziet nu de ev<strong>en</strong>ts langskom<strong>en</strong>.<br />

7 Schakel ev<strong>en</strong>ts ook e<strong>en</strong>s uit door er e<strong>en</strong> quote-tek<strong>en</strong> voor te zett<strong>en</strong>.<br />

Oef<strong>en</strong>ing 11.7<br />

E<strong>en</strong> ev<strong>en</strong>t programmer<strong>en</strong><br />

Voor de knop in het formulier programmer<strong>en</strong> we e<strong>en</strong> mogelijkheid om de werkmap af te sluit<strong>en</strong> <strong>en</strong><br />

de inhoud al dan niet op te slaan.<br />

1 Ga naar de VBA-editor.<br />

2 Selecteer in het Projectv<strong>en</strong>ster het blad waar de knop in getek<strong>en</strong>d is.<br />

3 Neem de volg<strong>en</strong>de macro over in het Click ev<strong>en</strong>t van de knop:<br />

C Private Sub cmdKnop_Click()<br />

Dim intR As Integer<br />

277


MACRO’S EN VBA IN EXCEL de basis<br />

Afbeelding 11.9<br />

Ev<strong>en</strong>ts op e<strong>en</strong> rij.<br />

Dim strN As String<br />

strN = ThisWorkbook.Name<br />

intR = MsgBox("Wilt u deze werkmap opslaan?", vbYesNo _<br />

Or vbQuestion)<br />

If intR = vbOK Th<strong>en</strong><br />

Workbooks(strN).Close savechanges:=True<br />

Else<br />

Workbooks(strN).Close savechanges:=False<br />

End If<br />

End Sub<br />

4 Sla eerst zelf de macro op.<br />

5 Test de macro.<br />

278


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

Afbeelding 11.10<br />

Melding<strong>en</strong> van optred<strong>en</strong>de ev<strong>en</strong>ts.<br />

U ziet hier hoe e<strong>en</strong> reactie van de gebruiker aan de hand van de knop die in e<strong>en</strong> messagebox<br />

wordt ingedrukt, opgevraagd <strong>en</strong> verwerkt kan word<strong>en</strong>. Tabel 11.6 geeft e<strong>en</strong><br />

overzicht van alle knopp<strong>en</strong> <strong>en</strong> pictogramm<strong>en</strong> die in e<strong>en</strong> messagebox toegepast kunn<strong>en</strong><br />

word<strong>en</strong>. U kunt met behulp van de Or-functie elke knop, pictogram, focusaanduiding<strong>en</strong><br />

of systeeminstelling toevoeg<strong>en</strong>. Met de volg<strong>en</strong>de regel heeft de box naast de bood-<br />

Afbeelding 11.11<br />

E<strong>en</strong> compleet uitgevoerde messagebox.<br />

279


MACRO’S EN VBA IN EXCEL de basis<br />

schap (de prompt) ook e<strong>en</strong> Ja, Nee <strong>en</strong> e<strong>en</strong> Annuler<strong>en</strong>-knop, de laatste heeft de focus<br />

<strong>en</strong> kan dus met de spatiebalk ’ingedrukt‘ word<strong>en</strong>. De knop die de focus heeft, is voorzi<strong>en</strong><br />

van e<strong>en</strong> stippellijntje; zie afbeelding 11.11 Tev<strong>en</strong>s is er e<strong>en</strong> vraagtek<strong>en</strong>pictogram.<br />

Als u de knop test, zult u merk<strong>en</strong> dat u in ge<strong>en</strong> <strong>en</strong>kele andere applicatie kunt werk<strong>en</strong>,<br />

totdat e<strong>en</strong> knop van de box is ingedrukt. Pas dan zal deze verdwijn<strong>en</strong>. Dit is e<strong>en</strong> effect<br />

van de toevoeging van de constante vbSystemModal.<br />

MsgBox "Mededeling aan de gebruiker", _<br />

vbYesNoCancel Or vbDefaultButton3 _<br />

Or vbQuestion Or vbSystemModal<br />

Tabel 11.6<br />

Constante<br />

Alle knopp<strong>en</strong>, pictogramm<strong>en</strong> <strong>en</strong> instelling<strong>en</strong> voor de messagebox<br />

Betek<strong>en</strong>is<br />

Knopp<strong>en</strong><br />

vbOKOnly<br />

vbOKCancel<br />

vbAbortRetryIgnore<br />

vbYesNoCancel<br />

vbYesNo<br />

vbRetryCancel<br />

OK-knop.<br />

De knopp<strong>en</strong> OK <strong>en</strong> Annuler<strong>en</strong>.<br />

Afbrek<strong>en</strong>, Opnieuw <strong>en</strong> Neger<strong>en</strong>.<br />

De knopp<strong>en</strong> Ja, Nee <strong>en</strong> Annuler<strong>en</strong>.<br />

Ja <strong>en</strong> Nee.<br />

De knopp<strong>en</strong> Opnieuw <strong>en</strong> Annuler<strong>en</strong>.<br />

Pictogramm<strong>en</strong><br />

vbCritical<br />

vbQuestion<br />

vbExclamation<br />

vbInformation<br />

- Ernstige boodschapp<strong>en</strong>.<br />

- Aanduiding voor e<strong>en</strong> vraag.<br />

– Waarschuwing.<br />

– Informatie.<br />

Knopfocus<br />

vbDefaultButton1<br />

vbDefaultButton2<br />

vbDefaultButton3<br />

vbDefaultButton4<br />

De eerste knop heeft de focus.<br />

De tweede knop heeft de focus.<br />

De derde knop heeft de focus.<br />

De vierde knop heeft de focus.<br />

280


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

Constante<br />

Betek<strong>en</strong>is<br />

Systeeminstelling<strong>en</strong><br />

vbApplicationModal<br />

vbSystemModal<br />

vbMsgBoxHelpButton<br />

VbMsgBoxSetForeground<br />

vbMsgBoxRight<br />

vbMsgBoxRtlReading<br />

De gebruiker moet op het berichtv<strong>en</strong>ster reager<strong>en</strong> voordat er in Excel<br />

verder gewerkt kan word<strong>en</strong>.<br />

Alle toepassing<strong>en</strong> word<strong>en</strong> onderbrok<strong>en</strong> totdat de gebruiker op het<br />

berichtv<strong>en</strong>ster heeft gereageerd. Dit geldt dus ook voor andere programma’s<br />

dan Excel!<br />

Voegt de knop Help aan het berichtv<strong>en</strong>ster toe.<br />

Het berichtv<strong>en</strong>ster wordt op de voorgrond getoond.<br />

Tekst wordt rechts uitgelijnd.<br />

Geeft op dat tekst op Hebreeuwse <strong>en</strong> Arabische system<strong>en</strong> van rechts<br />

naar links moet word<strong>en</strong> weergegev<strong>en</strong>.<br />

Retourwaard<strong>en</strong><br />

Constante Waarde Beschrijving<br />

vbOK 1 OK is ingedrukt.<br />

vbCancel 2 Annuler<strong>en</strong> is ingedrukt.<br />

vbAbort 3 Afbrek<strong>en</strong> is ingedrukt.<br />

vbRetry 4 Opnieuw is ingedrukt.<br />

vbIgnore 5 Neger<strong>en</strong> is ingedrukt.<br />

vbYes 6 Ja is ingedrukt.<br />

vbNo 7 Nee is ingedrukt<br />

11.2.5 Gebeurt<strong>en</strong>iss<strong>en</strong> van andere object<strong>en</strong><br />

Niet alle<strong>en</strong> besturingselem<strong>en</strong>t<strong>en</strong> k<strong>en</strong>n<strong>en</strong> ev<strong>en</strong>ts, ook andere object<strong>en</strong> kunn<strong>en</strong> ev<strong>en</strong>ts<br />

hebb<strong>en</strong>. In dit voorbeeld gebruik<strong>en</strong> we e<strong>en</strong> ev<strong>en</strong>t van het werkblad. Het werkblad<br />

k<strong>en</strong>t neg<strong>en</strong> ev<strong>en</strong>ts. We gebruiker er e<strong>en</strong>: het Change ev<strong>en</strong>t. Dit treedt op telk<strong>en</strong>s wanneer<br />

er iets aangepast wordt in het werkblad. U kunt deze gebeurt<strong>en</strong>is b<strong>en</strong>utt<strong>en</strong> om<br />

e<strong>en</strong> controle uit te voer<strong>en</strong> op datg<strong>en</strong>e wat ingevoerd wordt. Om nu te voorkom<strong>en</strong> dat<br />

de programmacode telk<strong>en</strong>s maar uitgevoerd wordt, wordt in e<strong>en</strong> parameter het bereik<br />

meegegev<strong>en</strong> dat gewijzigd werd. Op dat bereik kunt u nu e<strong>en</strong> test uitvoer<strong>en</strong> om te zi<strong>en</strong><br />

of er e<strong>en</strong> wijziging is geweest waarvoor de programmacode geldig is.<br />

Oef<strong>en</strong>ing 11.8<br />

Ev<strong>en</strong>ts van andere object<strong>en</strong><br />

1 Voeg e<strong>en</strong> leeg werkblad toe.<br />

281


MACRO’S EN VBA IN EXCEL de basis<br />

2 Noem het werkblad op de werkbladtab Gebeurt<strong>en</strong>iss<strong>en</strong>.<br />

3 Zet in cel B3 de tekst Postcode.<br />

4 Geef cel B4 de naam Postcode.<br />

5 Ga naar de VBA-editor.<br />

6 Zoek in de Projectverk<strong>en</strong>ner het blad Gebeurt<strong>en</strong>iss<strong>en</strong> op <strong>en</strong> dubbelklik erop.<br />

7 Selecteer in het vak Object in plaats van (Algeme<strong>en</strong>) het blad, Worksheet; zie afbeelding 11.12.<br />

8 Selecteer in het vak Procedures het ev<strong>en</strong>t Change; zie afbeelding 11.13.<br />

Afbeelding 11.12<br />

Selecteer het werkblad.<br />

Afbeelding 11.13<br />

En de juiste ev<strong>en</strong>tprocedure.<br />

9 De procedure wordt klaargezet <strong>en</strong> u ziet de parameter Target in het argum<strong>en</strong>t van de procedure<br />

gedefinieerd. Neem de volg<strong>en</strong>de programmacode over:<br />

C 'Declaraties<br />

Dim intT As Integer<br />

Dim blnFout As Boolean<br />

blnFout = False<br />

'Alle<strong>en</strong> als het e<strong>en</strong> cel betreft<br />

If Target.Rows.Count = 1 And Target.Columns.Count = 1 Th<strong>en</strong><br />

'Ga na of het de cel is met de postcode<br />

If Target = Range("Postcode") Th<strong>en</strong><br />

'Zo ja, test de postcode<br />

If L<strong>en</strong>(Target.Value) 7 Th<strong>en</strong><br />

blnFout = True<br />

Else<br />

'Ga na of de eerste vier cijfers zijn<br />

282


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

For intT = 1 To 4<br />

If Mid(Target.Value, intT, 1) < 0 _<br />

Or Mid(Target.Value, intT, 1) > 9 Th<strong>en</strong><br />

blnFout = True<br />

End If<br />

Next<br />

'Dan e<strong>en</strong> spatie<br />

If Mid(Target.Value, 5, 1) " " Th<strong>en</strong><br />

blnFout = True<br />

End If<br />

'Rechter twee moet<strong>en</strong> letters zijn<br />

For intT = 6 To 7<br />

If Mid(Target.Value, intT, 1) < A _<br />

And Mid(Target.Value, intT, 1) > Z Th<strong>en</strong><br />

blnFout = True<br />

End If<br />

Next<br />

End If<br />

End If<br />

If blnFout Th<strong>en</strong><br />

MsgBox "E<strong>en</strong> postcode bestaat uit 4 cijfers, " _<br />

& "e<strong>en</strong> spatie <strong>en</strong> twee letters!", _<br />

vbCritical Or vbOKOnly<br />

Target.Font.Color = vbRed<br />

Else<br />

'Alle<strong>en</strong> postcodecel mag gro<strong>en</strong> word<strong>en</strong><br />

If Target = Range("Postcode") Th<strong>en</strong><br />

Target.Font.Color = vbGre<strong>en</strong><br />

End If<br />

End If<br />

End If<br />

End Sub<br />

De verklar<strong>en</strong>de tekst in de code moet wel g<strong>en</strong>oeg zijn om de werking te begrijp<strong>en</strong>. U ziet dat de<br />

parameter Target eig<strong>en</strong>lijk e<strong>en</strong> Range object mee krijgt vanuit het werkblad <strong>en</strong> dat dit object<br />

dezelfde method<strong>en</strong> <strong>en</strong> eig<strong>en</strong>schapp<strong>en</strong> heeft als het normale object Range.<br />

Met e<strong>en</strong> eerste If clausule wordt gecontroleerd of het om slechts e<strong>en</strong> cel gaat <strong>en</strong> met de tweede<br />

If-clause wordt er gekek<strong>en</strong> of het range object in Target gelijk is aan de cel met de naam<br />

Postcode. Alle<strong>en</strong> dan wordt de rest van de procedure uitgevoerd.<br />

10 Ga terug naar het werkblad <strong>en</strong> voer e<strong>en</strong> correcte postcode in. De tekst in de cel wordt onmiddellijk<br />

in gro<strong>en</strong> weergegev<strong>en</strong> als de invoer bevestigd wordt met Enter.<br />

11 Voer in e<strong>en</strong> andere cel iets in. Er gebeurt niets.<br />

283


MACRO’S EN VBA IN EXCEL de basis<br />

12 Voer in B4 e<strong>en</strong> foutieve postcode in. De<br />

procedure reageert met e<strong>en</strong> messagebox;<br />

zie afbeelding 11.14.<br />

13 Klik de messagebox weg <strong>en</strong> merk op dat<br />

de tekst in de cel in rood wordt weergegev<strong>en</strong>.<br />

OPMERKING<br />

Wees erop verdacht dat als de knop Ontwerpmodus<br />

op de werkbalk is ingedrukt, de ev<strong>en</strong>ts<br />

van het werkblad onderdrukt word<strong>en</strong> <strong>en</strong> er<br />

niets zal gebeur<strong>en</strong>!<br />

Afbeelding 11.14<br />

Het ev<strong>en</strong>t is getriggerd <strong>en</strong> de procedure is in werking.<br />

11.2.6 Combobox<br />

E<strong>en</strong> laatste voorbeeld van ev<strong>en</strong>ts van andere object<strong>en</strong> gebruik<strong>en</strong> we om e<strong>en</strong> keuzelijst<br />

met invoervak (combobox) van inhoud te voorzi<strong>en</strong>. U zou ook e<strong>en</strong> gewone keuzelijst<br />

(listbox) op dezelfde manier kunn<strong>en</strong> gebruik<strong>en</strong>, maar het aardige van e<strong>en</strong> combobox<br />

is dat de gebruiker de lijst kan uitbreid<strong>en</strong>. De uitgebreide lijst blijft echter alle<strong>en</strong> maar<br />

bestaan zolang de werkmap geop<strong>en</strong>d is. Bij het afsluit<strong>en</strong> van de werkmap of ev<strong>en</strong>tueel<br />

zelfs bij het activer<strong>en</strong> van e<strong>en</strong> ander werkblad in de map, moet de inhoud van de combobox<br />

erg<strong>en</strong>s word<strong>en</strong> vastgelegd.<br />

Dat kunt u overal do<strong>en</strong>: in e<strong>en</strong> bestand op de vaste schijf, in e<strong>en</strong> andere werkmap, e<strong>en</strong><br />

ander werkblad of om het simpel te houd<strong>en</strong> - zoals we hier zull<strong>en</strong> do<strong>en</strong> - in hetzelfde<br />

werkblad.<br />

284


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

Afbeelding 11.15<br />

Uitbreiding in het werkblad.<br />

Oef<strong>en</strong>ing 11.9<br />

Ev<strong>en</strong>ts van andere object<strong>en</strong><br />

1 Breidt het werkblad uit met hetge<strong>en</strong> u in afbeelding 11.15 ziet.<br />

2 I3 heeft de naam Plaatsnam<strong>en</strong>.<br />

3 De (Name) property van de combobox is cmdPlaatsnam<strong>en</strong>. Stel deze eig<strong>en</strong>schap in door de<br />

combobox te selecter<strong>en</strong> <strong>en</strong> in het snelm<strong>en</strong>u voor Eig<strong>en</strong>schapp<strong>en</strong> te kiez<strong>en</strong>.<br />

4 Ga naar de VBA-editor <strong>en</strong> selecteer in het Projectv<strong>en</strong>ster het werkblad waar de combobox in<br />

getek<strong>en</strong>d is.<br />

5 Kies in het v<strong>en</strong>ster Object het werkblad, Worksheet.<br />

6 Kies in het vak Procedure het Activate ev<strong>en</strong>t <strong>en</strong> neem de volg<strong>en</strong>de macro over:<br />

C Private Sub Worksheet_Activate()<br />

'Declaraties<br />

Dim intAR As Integer 'Aantal rij<strong>en</strong><br />

285


MACRO’S EN VBA IN EXCEL de basis<br />

'Zoek het aantal rij<strong>en</strong> onder plaatsnam<strong>en</strong><br />

Range("Plaatsnam<strong>en</strong>").Select<br />

intAR = ActiveCell.Curr<strong>en</strong>tRegion.Rows.Count<br />

'Maak de combobox leeg<br />

cmbPlaatsnam<strong>en</strong>.Clear<br />

For intT = 1 To intAR - 1<br />

cmbPlaatsnam<strong>en</strong>.AddItem Range("Plaatsnam<strong>en</strong>").Offset(intT, 0).Value<br />

Next<br />

cmbPlaatsnam<strong>en</strong>.Text = "Kies de plaats"<br />

End Sub<br />

De cel met de naam Plaatsnam<strong>en</strong> wordt in de macro geselecteerd. Vervolg<strong>en</strong>s wordt het aantal<br />

rij<strong>en</strong> in het huidige gebied opgevraagd. In e<strong>en</strong> For… Next-lus wordt elke plaatsnaam toegevoegd<br />

aan de combobox met de methode AddItem. Tot slot wordt e<strong>en</strong> tekst met e<strong>en</strong> aanwijzing<br />

voor de gebruiker toegevoegd aan het tekstvak in de box. Het toevoeg<strong>en</strong> van items aan e<strong>en</strong><br />

listbox werkt net zo.<br />

7 Selecteer e<strong>en</strong> ander werkblad <strong>en</strong> selecteer vervolg<strong>en</strong>s dit werkblad weer. Hierdoor wordt de<br />

lijst gevuld met de plaatsnam<strong>en</strong> die in het werkblad staan.<br />

8 Selecteer in het vak Object in de VBA-editor cmbPlaatsnam<strong>en</strong>.<br />

9 Selecteer in vak Procedures het ev<strong>en</strong>t Keydown. Neem daarin de volg<strong>en</strong>de procedure over:<br />

C Private Sub cmbPlaatsnam<strong>en</strong>_KeyDown(ByVal KeyCode _<br />

As MSForms.ReturnInteger, ByVal Shift As Integer)<br />

If KeyCode = vbKeyReturn Th<strong>en</strong><br />

cmbPlaatsnam<strong>en</strong>.AddItem cmbPlaatsnam<strong>en</strong>.Text<br />

Range("Plaatsnam<strong>en</strong>").Select<br />

Selection.End(xlDown).Select<br />

ActiveCell.Offset(1, 0).Select<br />

ActiveCell.Value = cmbPlaatsnam<strong>en</strong>.Text<br />

cmbPlaatsnam<strong>en</strong>.Text = ""<br />

End If<br />

End Sub<br />

VBA heeft e<strong>en</strong> groot aantal Keycode constants. Deze constant<strong>en</strong> waarvan u er hier één ziet, kunt u<br />

in dit ev<strong>en</strong>t gebruik<strong>en</strong> om toets<strong>en</strong> te detecter<strong>en</strong> zoals Backspace, Enter, functietoets<strong>en</strong> of bijvoorbeeld<br />

Shift, Alt, etcetera. Als u iets met de normale letter <strong>en</strong> cijfertoets<strong>en</strong> van het toets<strong>en</strong>bord wilt<br />

do<strong>en</strong>, kunt u beter het Keypress-ev<strong>en</strong>t daarvoor gebruik<strong>en</strong>.<br />

Wat will<strong>en</strong> we hier? We will<strong>en</strong> dat als de gebruiker in het tekstvak van de combobox e<strong>en</strong> naam typt<br />

<strong>en</strong> op de Enter-toets drukt, deze wordt toegevoegd aan de lijst in de combobox <strong>en</strong> óók aan de lijst<br />

in het werkblad. De combobox heeft als eig<strong>en</strong>schap dat de lijst uitgebreid kan word<strong>en</strong>, maar dan<br />

moet die lijst wel erg<strong>en</strong>s vastgelegd kunn<strong>en</strong> word<strong>en</strong>.<br />

286


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

NUMMER ÉÉN IS SOMS NUMMER NUL<br />

Het is in VBA soms verwarr<strong>en</strong>d welk nummer het eerste item eig<strong>en</strong>lijk heeft. Vanuit onze<br />

m<strong>en</strong>selijke optiek is het eerste item altijd nummer één. Bij lijst<strong>en</strong> is dat niet zo. Het eerste<br />

item heeft in dat geval volgnummer nul. ComboBox.Item(0) is dus het eerste nummer uit de<br />

lijst. Wanneer we echter vrag<strong>en</strong> hoeveel items er in e<strong>en</strong> lijst staan met de Count methode,<br />

dan krijg<strong>en</strong> we bijvoorbeeld als antwoord ti<strong>en</strong>. Dat betek<strong>en</strong>t echter dat het laatste nummer<br />

volgnummer neg<strong>en</strong> heeft <strong>en</strong> niet ti<strong>en</strong> omdat er immers bij nul wordt begonn<strong>en</strong> met tell<strong>en</strong>. Met<br />

de Offset-methode in VBA is net zoiets aan de hand. OffSet(0, 0) is de huidige cel. Om die<br />

red<strong>en</strong> begint de lus in de voorgaande procedure bij 1 (omdat de tekst Plaatsnam<strong>en</strong> op de nulpositie<br />

staat <strong>en</strong> dat will<strong>en</strong> we niet in de combobox hebb<strong>en</strong>. De lus loopt derhalve ook tot AR<br />

– 1 in de Curr<strong>en</strong>tRegion.<br />

Als u programmeert in VBA is het mogelijk bov<strong>en</strong>aan in e<strong>en</strong> module nog voor de eerste procedure<br />

Option Base 1 op te nem<strong>en</strong>. Dat betek<strong>en</strong>t dat VBA standaard zal gaan tell<strong>en</strong> vanaf<br />

e<strong>en</strong> <strong>en</strong> niet vanaf nul. Dit is vooral van belang bij het werk<strong>en</strong> met arrays. Dit zijn tabell<strong>en</strong> met<br />

gegev<strong>en</strong>s in het geheug<strong>en</strong> van de pc, waarbij standaard ook het eerste elem<strong>en</strong>t in zo’n tabel<br />

volgnummer nul krijgt, maar met Option Base 1 e<strong>en</strong> ’m<strong>en</strong>selijke‘ één. Helaas heeft dat ge<strong>en</strong><br />

<strong>en</strong>kele invloed op lijst<strong>en</strong> <strong>en</strong> andere elem<strong>en</strong>t<strong>en</strong>. Option Base of niet; daarbinn<strong>en</strong> wordt gewoon<br />

geteld vanaf nul. Daarom lat<strong>en</strong> we het meestal maar achterwege omdat het de verwarring<br />

vaak alle<strong>en</strong> maar groter maakt <strong>en</strong> daardoor lastig te debugg<strong>en</strong> is. De beste tip die we u kunn<strong>en</strong><br />

gev<strong>en</strong>, is gewoon e<strong>en</strong> macro stap voor stap uitvoer<strong>en</strong> met slechts <strong>en</strong>kele gegev<strong>en</strong>s in<br />

lijst<strong>en</strong>, in het werkblad <strong>en</strong> in comboboxes <strong>en</strong> dergelijke <strong>en</strong> goed controler<strong>en</strong> welke waarde<br />

telvariabel<strong>en</strong> moet<strong>en</strong> hebb<strong>en</strong>.<br />

10 Vervolg<strong>en</strong>s moet e<strong>en</strong> door de gebruiker geselecteerde plaatsnaam erg<strong>en</strong>s in het werkblad geplaatst<br />

word<strong>en</strong>. Hiervoor gebruik<strong>en</strong> we het Click-ev<strong>en</strong>t van de combobox. Zoek dit op <strong>en</strong> neem<br />

de volg<strong>en</strong>de code op:<br />

Private Sub cmbPlaatsnam<strong>en</strong>_Click()<br />

Range("D5").Value = cmbPlaatsnam<strong>en</strong>.Text<br />

End Sub<br />

Dit ziet er erg e<strong>en</strong>voudig uit <strong>en</strong> dat ís het ook.<br />

11 Tot slot moet<strong>en</strong> we er steeds rek<strong>en</strong>ing mee houd<strong>en</strong> dat de gebruiker nam<strong>en</strong> heeft toegevoegd<br />

<strong>en</strong> dat deze nam<strong>en</strong> vastgelegd moet<strong>en</strong> word<strong>en</strong>. We légg<strong>en</strong> ze al vast in het werkblad, maar als<br />

de gebruiker de werkmap niet opslaat, gaan de toegevoegde gegev<strong>en</strong>s alsnog verlor<strong>en</strong>. Wij<br />

slaan de map dus steeds op <strong>en</strong> we zull<strong>en</strong> daarvoor het Deactivate ev<strong>en</strong>t van het Worksheet<br />

gebruik<strong>en</strong>:<br />

Private Sub Worksheet_Deactivate()<br />

Workbooks(ThisWorkbook.Name).Save<br />

End Sub<br />

287


MACRO’S EN VBA IN EXCEL de basis<br />

Dus telk<strong>en</strong>s wanneer e<strong>en</strong> ander werkblad in de map geselecteerd wordt, wordt de hele werkmap<br />

automatisch opgeslag<strong>en</strong>. Als u dit onw<strong>en</strong>selijk vindt, kunt u de gebruiker natuurlijk om<br />

toestemming vrag<strong>en</strong>. Wijs dan wel netjes op de consequ<strong>en</strong>ties als hij of zij ervoor kiez<strong>en</strong> om de<br />

map niet op te slaan.<br />

Opdracht 11.1<br />

Probleem oploss<strong>en</strong><br />

Er zit nog e<strong>en</strong> klein probleempje in deze macro’s. Selecteert u het werkblad waar de combobox<br />

in staat maar e<strong>en</strong>s <strong>en</strong> sla vervolg<strong>en</strong>s de werkmap op via het m<strong>en</strong>u Bestand. Sluit de werkmap <strong>en</strong><br />

op<strong>en</strong> deze opnieuw. De combobox blijft nu leeg <strong>en</strong> wordt pas gevuld als u eerst e<strong>en</strong> ander werkblad<br />

op<strong>en</strong>t <strong>en</strong> vervolg<strong>en</strong>s weer het werkblad met de combobox selecteert. Los dit op! Er zijn <strong>en</strong>kele<br />

oplossing<strong>en</strong> waarvan u er e<strong>en</strong> aan het eind van dit hoofdstuk aantreft.<br />

Opdracht 11.2<br />

Lijst sorter<strong>en</strong><br />

Het zou wel fijn zijn als de lijst met plaatsnam<strong>en</strong> gesorteerd werd, want dan wordt deze ook gesorteerd<br />

in de combobox weergegev<strong>en</strong>. Misschi<strong>en</strong> hebt u e<strong>en</strong> idee hoe dat te do<strong>en</strong>?<br />

11.3 User forms<br />

User forms zijn formulier<strong>en</strong> die door de gebruiker ontworp<strong>en</strong> word<strong>en</strong>. U zou hiervoor<br />

ook de term dialoogv<strong>en</strong>sters kunn<strong>en</strong> gebruik<strong>en</strong>, want e<strong>en</strong> formulier is niets anders dan<br />

e<strong>en</strong> dialoogv<strong>en</strong>ster waar u net zoveel besturingselem<strong>en</strong>t<strong>en</strong> op kwijt kunt als u maar<br />

wilt. Er is natuurlijk wel e<strong>en</strong> praktische gr<strong>en</strong>s aan het aantal, vanwege de beschikbare<br />

ruimte op het beeldscherm. E<strong>en</strong> userform heeft <strong>en</strong>kele belangrijke method<strong>en</strong> <strong>en</strong> eig<strong>en</strong>schapp<strong>en</strong>.<br />

We zett<strong>en</strong> ze op e<strong>en</strong> rijtje in tabel 11.7.<br />

Tabel 11.7<br />

Eig<strong>en</strong>schap<br />

(Name)<br />

Caption<br />

Enabled<br />

Height<br />

Left<br />

Eig<strong>en</strong>schapp<strong>en</strong> <strong>en</strong> method<strong>en</strong> van e<strong>en</strong> userform<br />

Omschrijving<br />

De naam waaronder het userform in de programmacode kan word<strong>en</strong> herk<strong>en</strong>d <strong>en</strong> aangesprok<strong>en</strong>.<br />

De tekst in de titelbalk van het formulier.<br />

De waarde True houdt in dat het formulier actief is <strong>en</strong> gebruikt kan word<strong>en</strong>, bij False is<br />

dat niet het geval. E<strong>en</strong> handige manier om e<strong>en</strong> formulier ev<strong>en</strong> buit<strong>en</strong> werking te stell<strong>en</strong>.<br />

De hoogte van het formulier.<br />

De afstand tot de bov<strong>en</strong>zijde van het scherm.<br />

288


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

Eig<strong>en</strong>schap<br />

ShowModal<br />

StartUpPosition<br />

Top<br />

Width<br />

Methode<br />

Load<br />

Hide<br />

PrintForm<br />

Show<br />

Unload<br />

Omschrijving<br />

Deze eig<strong>en</strong>schap kan alle<strong>en</strong> ingesteld word<strong>en</strong> zolang het formulier niet gelad<strong>en</strong> is,<br />

daarna is het e<strong>en</strong> alle<strong>en</strong>-lez<strong>en</strong> eig<strong>en</strong>schap. E<strong>en</strong> modaal formulier (True) moet eerst<br />

ingevuld <strong>en</strong> geslot<strong>en</strong> word<strong>en</strong> voordat de gebruiker verder kan. Voor e<strong>en</strong> non-modaal<br />

formulier (False) geldt dat niet.<br />

Deze eig<strong>en</strong>schap bepaalt waar het formulier op het scherm verschijnt. Met Manual<br />

bepaalt u zelf met behulp van de eig<strong>en</strong>schapp<strong>en</strong> Top <strong>en</strong> Left de positie. C<strong>en</strong>terOwner<br />

betek<strong>en</strong>t gec<strong>en</strong>treerd t<strong>en</strong> opzichte van de eig<strong>en</strong>aar (in dit geval de werkmap waartoe het<br />

formulier behoort), C<strong>en</strong>terScre<strong>en</strong> is midd<strong>en</strong> op het beeldscherm <strong>en</strong> WindowsDefault is<br />

meestal in de linker bov<strong>en</strong>hoek van het scherm.<br />

Zie Left.<br />

De breedte van het formulier.<br />

Omschrijving<br />

Het formulier wordt alle<strong>en</strong> in het geheug<strong>en</strong> gelad<strong>en</strong>, maar wordt niet zichtbaar.<br />

Het formulier wordt verborg<strong>en</strong>, maar blijft wel in het geheug<strong>en</strong>.<br />

E<strong>en</strong> handige methode om de totale inhoud van e<strong>en</strong> formulier af te drukk<strong>en</strong>.<br />

Met deze methode wordt het formulier in het geheug<strong>en</strong> gelad<strong>en</strong> als het nog niet is<br />

gelad<strong>en</strong>. Daarna wordt het op het scherm getoond.<br />

Het formulier wordt uit het geheug<strong>en</strong> verwijderd.<br />

Oef<strong>en</strong>ing 11.10 User form<br />

1 Zorg voor e<strong>en</strong> nieuw werkblad met daarin e<strong>en</strong> e<strong>en</strong>voudige database bestaande uit e<strong>en</strong> kolom<br />

voor nam<strong>en</strong> <strong>en</strong> e<strong>en</strong> kolom voor telefoonnummers.<br />

2 Voeg e<strong>en</strong> knop Naam toevoeg<strong>en</strong> toe.<br />

3 Ga naar de VBA-editor <strong>en</strong> kies in het m<strong>en</strong>u Invoeg<strong>en</strong>, User form.<br />

4 Er wordt e<strong>en</strong> leeg formulier toegevoegd <strong>en</strong> e<strong>en</strong> werkbalk Werkset; zie afbeelding 11.17. Deze<br />

werkset is vergelijkbaar met die u bij het tek<strong>en</strong><strong>en</strong> van besturingselem<strong>en</strong>t<strong>en</strong> in e<strong>en</strong> Excel-werkblad<br />

hebt gezi<strong>en</strong>.<br />

5 Tek<strong>en</strong> twee labels, twee tekstvakk<strong>en</strong> <strong>en</strong> twee knopp<strong>en</strong>; zie afbeelding 11.17.<br />

6 Pas de captions van de beide labels aan, in afbeelding 11.18 ziet u hoe dat voor het tweede<br />

label wordt uitgevoerd.<br />

7 De overige gegev<strong>en</strong>s ziet u in de volg<strong>en</strong>de tabel, terwijl afbeelding 11.19 het aangepaste formulier<br />

toont op het mom<strong>en</strong>t dat net in de eig<strong>en</strong>schapp<strong>en</strong>lijst de Caption van het formulier wordt<br />

ingevuld. Ook e<strong>en</strong> formulier heeft e<strong>en</strong> opschrift; dat is namelijk de tekst in de titelbalk.<br />

289


MACRO’S EN VBA IN EXCEL de basis<br />

Afbeelding 11.16<br />

E<strong>en</strong> userform is toegevoegd.<br />

Tabel 11.8<br />

De eig<strong>en</strong>schapp<strong>en</strong> van het formulier<br />

Besturingselem<strong>en</strong>t Eig<strong>en</strong>schap Instelling<br />

Label1 (Name) Label1<br />

Caption<br />

Naam:<br />

Label2 (Name) Label2<br />

Caption<br />

Telefoonnummer:<br />

Textbox1 (Name) txtNaam<br />

Txtbox2 (Name) txtTelNum<br />

Commandbutton1 (Name) cmdOK<br />

Caption<br />

OK<br />

Commandbutton2 (Name) cmdAnnuler<strong>en</strong><br />

Caption<br />

Annuler<strong>en</strong><br />

UserForm1 (Name) frmNT<br />

Caption<br />

Invoer naam <strong>en</strong> telefoonnummer<br />

290


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

Afbeelding 11.17<br />

De besturingselem<strong>en</strong>t<strong>en</strong> word<strong>en</strong> getek<strong>en</strong>d.<br />

Afbeelding 11.18<br />

E<strong>en</strong> userform is toegevoegd.<br />

291


MACRO’S EN VBA IN EXCEL de basis<br />

De niet-g<strong>en</strong>oemde properties houd<strong>en</strong> hun standaard waarde (default).<br />

Afbeelding 11.19<br />

De Caption (=titelbalk) van het formulier wordt ingevuld.<br />

11.3.1 Het formulier ton<strong>en</strong><br />

Er zijn verschill<strong>en</strong>de manier om met het formulier te werk<strong>en</strong>:<br />

U kunt het eerst in het geheug<strong>en</strong> lad<strong>en</strong> met Load frmFormName. Dit heeft als voordeel<br />

dat ingewikkelde formulier<strong>en</strong> of formulier<strong>en</strong> met netwerkkoppeling<strong>en</strong> op de<br />

achtergrond gelad<strong>en</strong> kunn<strong>en</strong> word<strong>en</strong> zonder dat gebruikers hier hinder van ondervind<strong>en</strong>.<br />

Op het mom<strong>en</strong>t dat we het formulier nodig hebb<strong>en</strong>, gebruik<strong>en</strong> we de<br />

Show-methode.<br />

Het is ook mogelijk het formulier direct op het scherm te zett<strong>en</strong> met de Show-methode.<br />

Als het formulier op dat mom<strong>en</strong>t nog niet is gelad<strong>en</strong>, zal het alsnog automatisch<br />

in het geheug<strong>en</strong> word<strong>en</strong> gelad<strong>en</strong>. Met e<strong>en</strong> e<strong>en</strong>voudig formulier zoals we hier<br />

hebb<strong>en</strong> behandeld is dat de aanbevol<strong>en</strong> methode.<br />

Als het formulier ev<strong>en</strong> niet nodig is, kunt u het verberg<strong>en</strong> met de Hide-methode.<br />

Het blijft dan wél in het geheug<strong>en</strong> gelad<strong>en</strong>.<br />

Met Unload frmFormName kunt u het hele formulier uit het geheug<strong>en</strong> verwijder<strong>en</strong>.<br />

Als het vaak nodig is <strong>en</strong> e<strong>en</strong> ingewikkeld formulier betreft, is dit niet aan te rad<strong>en</strong>.<br />

E<strong>en</strong> verborg<strong>en</strong> formulier is wel toegankelijk vanuit de programmacode, ev<strong>en</strong>als alle<br />

besturingselem<strong>en</strong>t<strong>en</strong> daarop. U kunt dus eerst al van alles invull<strong>en</strong> <strong>en</strong> klaarzett<strong>en</strong>,<br />

voordat u het formulier toont.<br />

Het is mogelijk in e<strong>en</strong> van de ’opstartev<strong>en</strong>ts‘ van werkmap of blad het formulier te<br />

292


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

lad<strong>en</strong>, maar u kunt het ook gewoon aan e<strong>en</strong> macro koppel<strong>en</strong> die met e<strong>en</strong> toets of<br />

e<strong>en</strong> knop of m<strong>en</strong>uopdracht wordt gestart.<br />

11.3.2 Programmacode voor het formulier<br />

Als u in de Projectverk<strong>en</strong>ner kijkt, dan ziet u dat het formulier onder e<strong>en</strong> apart kopje<br />

Formulier<strong>en</strong> is toegevoegd aan de werkmap. Dubbelklikk<strong>en</strong> op de vermelding in de<br />

Projectverk<strong>en</strong>ner op<strong>en</strong>t slechts het formulier zelf <strong>en</strong> niet het bijbehor<strong>en</strong>de codev<strong>en</strong>ster.<br />

Daarvoor zijn twee manier<strong>en</strong>:<br />

Kies in het snelm<strong>en</strong>u Programmacode weergev<strong>en</strong>, zoals in afbeelding 11.20 te zi<strong>en</strong><br />

is;<br />

Of dubbelklik erg<strong>en</strong>s in het formulier. Dubbelklikt u op e<strong>en</strong> besturingselem<strong>en</strong>t in<br />

het formulier, dan ziet u ook de code <strong>en</strong> wordt onmiddellijk het standaard ev<strong>en</strong>t<br />

van dat besturingselem<strong>en</strong>t afgehandeld.<br />

Afbeelding 11.20<br />

Programmacode vind<strong>en</strong> bij het formulier.<br />

11.3.3 Programmacode aan het formulier toevoeg<strong>en</strong><br />

U weet inmiddels hoe u de diverse object<strong>en</strong> <strong>en</strong> de bijbehor<strong>en</strong>de ev<strong>en</strong>ts kunt vind<strong>en</strong>.<br />

We behandel<strong>en</strong> nog ev<strong>en</strong> alle programmacode bij de beide knopp<strong>en</strong> in dit formulier.<br />

293


MACRO’S EN VBA IN EXCEL de basis<br />

C Private Sub cmdAnnuler<strong>en</strong>_Click()<br />

If L<strong>en</strong>(txtNaam.Text) > 0 Or L<strong>en</strong>(txtTelNum.Text) > 0 Th<strong>en</strong><br />

If MsgBox("Er staan nog gegev<strong>en</strong>s in het formulier" _<br />

& vbCrLf & "Wilt u deze bewar<strong>en</strong>?", _<br />

vbYesNo Or vbQuestion) = vbYes Th<strong>en</strong><br />

Exit Sub<br />

End If<br />

End If<br />

Unload frmNT<br />

End Sub<br />

Als er op de Annuler<strong>en</strong>-knop wordt geklikt, dan zal eerst word<strong>en</strong> gecontroleerd of er<br />

nog iets in e<strong>en</strong> van beide tekstvakk<strong>en</strong> staat. Is dat het geval, dan wordt de gebruiker de<br />

vraag voorgeschoteld of de inhoud van het formulier moet word<strong>en</strong> bewaard. Klikt de<br />

gebruiker op de Ja-knop, dan wordt de procedure verlat<strong>en</strong>. Bij e<strong>en</strong> Nee moet met Unload<br />

frmNT het formulier uit het geheug<strong>en</strong> word<strong>en</strong> verwijderd.<br />

C Private Sub cmdOK_Click()<br />

'Declaraties<br />

Dim blnFout As Boolean<br />

If L<strong>en</strong>(txtNaam.Text) = 0 Or L<strong>en</strong>(txtTelNum.Text) = 0 Th<strong>en</strong><br />

blnFout = True<br />

End If<br />

'Br<strong>en</strong>g gegev<strong>en</strong>s over naar werkblad<br />

If Not (blnFout) Th<strong>en</strong><br />

Workbooks("v-11.xls").Worksheets("NaamTelNum").Select<br />

Range("A65536").End(xlUp).Select<br />

'Ga e<strong>en</strong> rij omlaag<br />

ActiveCell.Offset(1, 0).Select<br />

'Vul de naam in<br />

ActiveCell.Value = txtNaam.Text<br />

'Ga e<strong>en</strong> kolom naar rechts<br />

ActiveCell.Offset(0, 1).Select<br />

'Vul het telefoonnummer in<br />

ActiveCell.Value = txtTelNum.Text<br />

Range("NaamTelNum").Select<br />

txtNaam.Text = ""<br />

txtTelNum.Text = ""<br />

txtNaam.SetFocus<br />

End If<br />

End Sub<br />

Wordt op de OK-knop geklikt, dan wordt ook weer gecontroleerd of er wel iets in de<br />

tekstvakk<strong>en</strong> staat. Als deze leeg zoud<strong>en</strong> zijn, dan zou de integriteit van onze ’database‘<br />

in het gevaar kom<strong>en</strong>, omdat er dan e<strong>en</strong> leeg veld zou word<strong>en</strong> toegevoegd. U kunt<br />

natuurlijk veel uitgebreidere controles inbouw<strong>en</strong>! Staat er iets in e<strong>en</strong> van beide tekst-<br />

294


11 <strong>Besturingselem<strong>en</strong>t<strong>en</strong></strong> <strong>en</strong> formulier<strong>en</strong><br />

vakk<strong>en</strong>, dan wordt de informatie aan de lijst toegevoegd op dezelfde manier zoals in<br />

hoofdstuk 9 al uitgebreid is doorg<strong>en</strong>om<strong>en</strong>. U ziet dat aan het eind van de procedure de<br />

beide tekstvakk<strong>en</strong> leeg gemaakt word<strong>en</strong> <strong>en</strong> de cursor weer in het naamvak geplaatst<br />

wordt met txtNaam.SetFocus.<br />

C Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)<br />

If CloseMode = vbFormControlM<strong>en</strong>u Th<strong>en</strong><br />

MsgBox "U kunt dit formulier alle<strong>en</strong> sluit<strong>en</strong> met de Annuler<strong>en</strong>-knop",<br />

_<br />

vbOKOnly Or vbInformation<br />

Cancel = True<br />

End If<br />

End Sub<br />

Elk formulier heeft net zoals alle andere Windows-v<strong>en</strong>sters e<strong>en</strong> pictogram Sluit<strong>en</strong> in<br />

de rechter bov<strong>en</strong>hoek. Als u niet wilt dat de gebruiker hiermee het v<strong>en</strong>ster kan sluit<strong>en</strong>,<br />

kunt u dat verhinder<strong>en</strong> door de Cancel-parameter op True te zett<strong>en</strong>. Hiermee geeft u<br />

het besturingssysteem e<strong>en</strong> seintje dat het formulier niet opgeruimd mag word<strong>en</strong>.<br />

Opdracht 11.3<br />

1 Waar zou u e<strong>en</strong> controle inbouw<strong>en</strong> op e<strong>en</strong> correcte invoer van e<strong>en</strong> tekstvak? U kunt bij het telefoonnummer<br />

d<strong>en</strong>k<strong>en</strong> aan e<strong>en</strong> beperking van de invoer tot cijfers <strong>en</strong> e<strong>en</strong> ligg<strong>en</strong>d streepje.<br />

2 Bouw zo’n controle in.<br />

11.4 Oplossing opdracht 11.1<br />

Hoewel u in het ev<strong>en</strong>t Workbook_Op<strong>en</strong> natuurlijk de combobox net zo kunt vull<strong>en</strong><br />

als dat in het ev<strong>en</strong>t Worksheet_Activate gebeurde waarbij wel de naam van het werkblad<br />

toegevoegd moet word<strong>en</strong>, kan het ook op e<strong>en</strong> elegante manier zonder twee keer<br />

hetzelfde te moet<strong>en</strong> programmer<strong>en</strong>. We wet<strong>en</strong> dat als e<strong>en</strong> procedure b<strong>en</strong>oemd wordt<br />

met het woord Private, dat die procedure alle<strong>en</strong> herk<strong>en</strong>baar is binn<strong>en</strong> het werkblad of<br />

de module waar ze in is opgeslag<strong>en</strong>. Als u in het blad Gebeurt<strong>en</strong>iss<strong>en</strong> Private Sub<br />

Worksheet_Activate() wijzigt in Public Sub Worksheet_Activate(), is de procedure<br />

ine<strong>en</strong>s in alle werkblad<strong>en</strong> <strong>en</strong> -mapp<strong>en</strong> herk<strong>en</strong>baar.<br />

Het Workbook_Op<strong>en</strong> ev<strong>en</strong>t wordt dan:<br />

C Private Sub Workbook_Op<strong>en</strong>()<br />

With Worksheets("Gebeurt<strong>en</strong>iss<strong>en</strong>")<br />

.Select<br />

.Worksheet_Activate<br />

End With<br />

End Sub<br />

295

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!