DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de...

23
12 EXCEL AANPASSEN De belangrijkste punten van hoofdstuk 12 Het aanpassen en uitbreiden van Excel; Een menu met keuzen daarin te verwijderen of juist toe te voegen; Deze menukeuzen te koppelen aan een macro; Zelf een functie ontwerpen; Een invoegtoepassing maken van een eigen functie.

Transcript of DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de...

Page 1: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

12EXCEL AANPASSEN

De belangrijkste punten van hoofdstuk 12 Het aanpassen en uitbreiden van Excel;

Een menu met keuzen daarin te verwijderen of juist toe te voegen;

Deze menukeuzen te koppelen aan een macro;

Zelf een functie ontwerpen;

Een invoegtoepassing maken van een eigen functie.

DB_Macros_boek.indb 296 10/11/06 12:00:31

Page 2: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

12EXCEL AANPASSEN

Wat leert u in dit hoofdstuk?

Een eigen menu aan de Excel-menubalk toevoegen.

Een eigen functie in de functiewizard.

Een functie die we ook uit Excel kennen in een macro toepassen.

DB_Macros_boek.indb 297 10/11/06 12:00:33

Page 3: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

298

MACRO’S EN VBA IN EXCEL de basis

12.1 Met menu’s werken

Misschien hebt u het zich nog nooit zo direct gerealiseerd, maar de menubalk van Ex-cel met standaardopties is eigenlijk helemaal niet zo standaard. U kunt de menuopties naar eigen inzicht schikken, verwijderen of er zelfs eigen menu’s aan toevoegen. Dit kan via een van de dialoogvensters van Excel, maar ook direct vanuit een macro.

OORSPRONKELIJKE MENU’S TERUGHALEN

Er is een eenvoudige methode om de oorspronkelijke instelling van Excel terug te halen. Hebt u een stand-alone machine of een pc die op een netwerk van gelijkwaardige machines is aangesloten (peer-to-peer) dan kunt u het in ieder geval zelf. Is uw pc in een bedrijfsnetwerk aangesloten, dan kan het noodzakelijk zijn dat u de hulp van een systeembeheerder inroept. Sommige grote bedrijven of instellingen hebben Excel namelijk aangepast aan de taken die u er mee moet uitvoeren. Het kán dus voorkomen dat bepaalde menu-onderdelen niet geladen worden. In dat geval zal het u ook onmogelijk gemaakt worden zelf wijzigingen aan te brengen.

De laatstgebruikte indeling van de menu’s en de werkbalken legt Excel telkens weer vast in een bestand op schijf als u het programma langs de normale weg afsluit – dus niet als de stek-ker er gewoon uit getrokken wordt of als de machine vastloopt. Per gebruiker wordt er een bestandje op schijf vastgelegd met deze naam: Excel11.xlb. Doorgaans vindt u dit bestand in dit pad, waarbij u username moet vervangen door uw eigen inlognaam:

C:\Documents and Settings\username\Application Data\Microsoft\Excel\

Als u Excel afgesloten hebt en u verwijdert vervolgens dit bestand met de Windows Verken-ner, zal Excel de volgende keer starten zoals het programma dat deed toen het oorspronkelijk op de pc geïnstalleerd werd. Het bestandje met de instellingen zal op deze manier ook weer opnieuw worden aangemaakt.

Presenteert Excel zich een dag later echter weer anders, zonder dat u er iets aan gedaan hebt, dan hebt u te maken met een of ander automatisch recovery systeem. In dat geval raad-pleegt u de systeembeheerder.

12.1.1 Menu’s toevoegen

Als u nog nooit iets met de uitbreiding van menu’s gedaan hebt, is het verstandig deze procedure eerst even te oefenen voordat u gaat experimenteren met het wijzigen van Excel’s menustructuur via macro’s. De stappen zijn als volgt:

1 In het dialoogvenster Aanpassen sleept u vanaf de lijst op het tabblad Opdrachten een Nieuw menu naar de menubalk van Excel;

DB_Macros_boek.indb 298 10/11/06 12:00:34

Page 4: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

299

12 Excel aanpassen

2 Vervolgens sleept u net zoveel nieuwe menu’s in dit zojuist toegevoegde menu als u nodig denkt te hebben;

3 Daarna wijzigt u de opschriften van de menu’s;

4 Tot slot koppelt u de menukeuzen aan macro’s die u vooraf geschreven en getest hebt.

Het is mogelijk een menu op elke willekeurige plek op de bestaande menubalk tussen te voegen. We noemen dit met name, omdat u zich zo realiseert dat de volgorde van de menu’s in principe niet vast staat! Zolang het dialoogvenster Aanpassen op het scherm staat, kunt u namelijk ook de bestaande, ingebouwde Excel-menu’s verslepen en zelfs verwijderen. Probeer het maar eens met het menu Bestand – een leuke keuze om mee te beginnen!

Oefening 12.1 Menu’s aanpassen en macro toekennen aan een menukeuze

1 Kies in het menu Beeld, Werkbalken de laatste keuze van het uitvouwmenu: Aanpassen…;

2 Selecteer het tabblad Opdrachten;

3 Scroll onder Categoriën helemaal omlaag tot u Nieuw menu ziet. Selecteer dit;

4 Sleep vanuit het vak Opdrachten de keuze Nieuw menu naar de menubalk. U ziet dit in afbeel-ding 12.1;

5 Herhaal deze procedure, maar positioneer het volgende menu in het kleine vakje onder de tekst Nieuw menu op de menubalk. Zo creëert u een keuze ín een menu. Herhaal dit een paar maal.

Merk overigens op dat enkele van de oorspronkelijke Excel-menu’s in afbeelding 12.2 op een andere plek liggen. U kunt ze gewoon verslepen, in een ander menu leggen of zelfs naar het dialoogvenster slepen waardoor ze van de menubalk verdwijnen!

6 Het instellen van een menu op de menubalk of een keuze ín een menu is gelijk. Klik met de rech-ter muisknop op het menu of de keuze en geef achter Naam: de menunaam op. U kunt een am-persand ( & ) vóór de letter plaatsen die onderstreept moet worden. Met de toetsencombinatie Alt + deze letter kan het menu dan geopend worden,dit wordt de sneltoets genoemd. De letter moet uniek zijn en mag niet nog eens op de menubalk voorkomen; zie afbeelding 12.3.

7 In hetzelfde snelmenu kunt u klikken op Macro toewijzen…waarna in een lijst een macro gese-lecteerd kan worden. Het is een goede gewoonte om macro’s aan menukeuzen te verbinden die in de persoonlijke macrowerkmap zijn ondergebracht. Deze wordt immers steeds automatisch geladen! Raadpleeg hoofdstuk 1 voor het werken met de persoonlijke macrowerkmap.

DB_Macros_boek.indb 299 10/11/06 12:00:34

Page 5: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

300

MACRO’S EN VBA IN EXCEL de basis

Afbeelding 12.2Menukeuze aan het menu toevoegen.

Afbeelding 12.1Nieuw menu aan de menubalk toevoegen.

DB_Macros_boek.indb 300 10/11/06 12:00:35

Page 6: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

301

12 Excel aanpassen

Afbeelding 12.4Macro toekennen.

Afbeelding 12.3Menunaam opgeven.

DB_Macros_boek.indb 301 10/11/06 12:00:36

Page 7: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

302

MACRO’S EN VBA IN EXCEL de basis

Op soortgelijke wijze kunt u knoppen aan de menubalk of een van de werkbalken toe-voegen. In afbeelding 12.5 ziet u dat knoppen uit de categorie Macro’s gehaald kun-nen worden. In feite is er maar een knop beschikbaar, maar deze kunt u weer via een snelmenu helemaal instellen zoals u dat wenst. Ook aan een knop kan op vergelijkbare manier een macro toegewezen worden.

Afbeelding 12.5 Knop toevoegen.

12.1.2 Menu’s beheren via een macro

VBA herkent de menubalk in Excel als CommandBars(1) van het Application-object. Dat is een beetje lastig omdat hier niet met een naam, maar met een volgnummer (index) gewerkt wordt. Het is wel prettig dat de eerste CommandBar gewoon de Excel-menubalk is.

Het CommandBar-object bezit een Controls-verzameling. Deze bevat in eerste instan-tie alle menu’s van Excel. Het merkwaardige feit doet zich voor dat volgnummer één het menu Bestand is en volgnummer tien het menu Help. Nummer acht lijkt niet bij een menu te horen. Voert u de volgende macro’s maar eens stap voor stap uit en wie het dan weet mag het zeggen…

Oefening 12.1 Het menumysterie

C Sub WisMenus() Dim intT As Integer For intT = 1 To 10

DB_Macros_boek.indb 302 10/11/06 12:00:37

Page 8: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

303

12 Excel aanpassen

Application.CommandBars(1) _ .Controls.Item(intT).Visible = False NextEnd Sub

Sub ZetMenusTerug() Dim intT As Integer For intT = 1 To 10 Application.CommandBars(1) _ .Controls.Item(intT).Visible = True NextEnd Sub

1 Neem beide procedures over in een module;

2 Voer WisMenus stap voor stap uit door in de procedure te klikken en herhaaldelijk op F8 te klik-ken;

3 Als u daarbij de VBA-editor iets verkleint zoals in afbeelding 12.6 en de muis boven de telvari-abele laat rusten, ziet u bij elke stap welke waarde deze heeft, terwijl u op de achtergrond ziet hoe Excel van z’n hele menu ontdaan wordt;

4 De andere macro brengt alle menu’s weer terug.

Afbeelding 12.6Menu’s verbergen.

DB_Macros_boek.indb 303 10/11/06 12:00:37

Page 9: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

304

MACRO’S EN VBA IN EXCEL de basis

12.1.3 Eigen menu’s toevoegen

Behalve via de zojuist genoemde methode met de ingebouwde menu’s goochelen, kunt u ook een eigen menu toevoegen. U kunt dit menu het beste een duidelijke naam geven, bijvoorbeeld een bedrijfs- of afdelingsnaam. Het Controls-object biedt verschil-lende methoden en eigenschappen om met menu’s te werken.

Tabel 12.1 Overzicht van methoden en eigenschappen

Item Parameters Omschrijving

Methode

Add Voeg een menu toe.

Type Bepaalt het type besturingselement dat wordt toegevoegd, zoals een knop – msoControlButton, een menu – msoControlPopup of een keuzelijst – mso-ControlDropDown.

Id Wordt deze parameter weggelaten dan wordt een leeg besturingselement van het opgegeven type toegevoegd. Een waarde voegt een van de ingebou-wde elementen toe.

Parameter Hiermee kunt u een willekeurige waarde aan VBA-procedures doorgeven.

Before Bepaalt de positie van het element. Waarde een plaatst een eigen menu dus vóór het ingebouwde menu Bestand.

Temporary De waarde True zorgt ervoor dat het toegevoegde menu tijdelijk is en verwi-jderd wordt als Excel wordt afgesloten. Geeft u False op dan blijft het menu bewaard in het eerder genoemde bestand Excel11.xlb.

Delete Verwijder een menu

Temporary Als deze parameter de waarde True heeft én het menuelement is geplaatst met de waarde False in de Temporary parameter van de Add methode, wordt het menu alleen verwijderd voor de duur van de sessie. Wordt Excel opnieuw gestart dan komt het menuelement terug. Geeft u de waarde False op dan is de verwijdering permanent.

Eigenschap

BeginGroup Een boolean eigenschap die een groepslijntje in een menu zet.

Caption De menutekst

Count Telt het aantal elementen in de Controls-verzameling.

Enabled True maakt het menu toegankelijk. False laat het menu wel zien, maar het is grijs en kan niet gebruikt worden

OnAction Verwijst naar de macro die uitgevoerd moet worden als de gebruiker op het menu klikt of de bijbehorende sneltoets gebruikt.

Visible True maakt het menu zichtbaar. False maakt het onzichtbaar.

DB_Macros_boek.indb 304 10/11/06 12:00:38

Page 10: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

305

12 Excel aanpassen

Oefening 12.2 Menu toevoegen via een macro

1 Neem de volgende macro over om een menu toe te voegen:

C Sub VoegEenMenuToe() Dim mnuMM As Object MsgBox Application.CommandBars(1).Controls.Count Set mnuMM = Application.CommandBars(1).Controls.Add _ (Type:=msoControlPopup, before:=1, temporary:=True) mnuMM.Caption = "Ipaa &Service" mnuMM.Visible = True mnuMM.OnAction = "LogInDatabase" MsgBox Application.CommandBars(1).Controls.CountEnd Sub

Eerst wordt het aantal menu’s geteld en weergegeven in een messagebox. Dan wordt een menu toegevoegd vóór het menu Bestand. De menutekst wordt opgegeven met een ampersand voor een letter die niet in een van de andere menu’s voorkomt. Dit wordt de sneltoets. De macro die uitgevoerd wordt is LogInDatabase. U kunt een willekeurige macro gebruiken die u gemaakt hebt. Tot slot wordt het aantal menu’s weer geteld en weergegeven.

Bij menu’s op de menubalk – zoals in dit voorbeeld – wordt normaal gesproken geen handeling uitgevoerd als we op de menukeuze klikken. In dat geval laat u gewoon de OnAction eigen-schap weg en vult u het menu met items.

2 Deze macro verwijdert een specifiek toegevoegd menu. U noemt het dus bij naam!

C Sub VerwijderEenMenu() Application.CommandBars(1).Controls("Ipaa &Service").DeleteEnd Sub

Overigens is het een goede zaak om een menu eerst te verwijderen voordat u het toevoegt. Bestaat het menu namelijk al en u voegt het (nogmaals) toe, dan zijn er twee! In de procedure VoegEenMenuToe roept u gewoon eerst de procedure VerWijderEenMenu aan. Probeert u daarentegen een menu te verwijderen, terwijl het nog niet bestaat, dan levert dat een fout in de macro op.

3 Deze fout kunt u als volgt voorkomen:

C Sub VerwijderEenMenu() On Error Resume Next Application.CommandBars(1).Controls("Ipaa &Service").Delete On Error Goto 0End Sub

Voeg deze uitbreiding pas toe als alles foutloos werkt. Met On Error Resume Next zegt u ’Ga

DB_Macros_boek.indb 305 10/11/06 12:00:39

Page 11: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

306

MACRO’S EN VBA IN EXCEL de basis

maar gewoon door met de macro als er een fout optreedt’! Zo zult u andere fouten echter óók niet meer zien.

Afbeelding 12.7Het menu is toegevoegd.

Opdracht 12.1 Geschikt event zoeken om automatisch een menu toe te voegen

Ga na in welke events u dit soort macro’s zou kunnen plaatsen om Excel automatisch van de juiste menu’s te voorzien.

Opdracht 12.2 Werkbalk opbouwen via een macro

Probeer er zelf achter te komen hoe u een werkbalk via een macro zou kunnen opbouwen. Een paar tips: kijk in de helpbestanden onder andere bij: CommandBars en de methoden Delete en Add. Om een knop aan de werkbalk toe te voegen hebt u nodig:

Set btnKnop = wbMijnWerkBalk.Controls.Add(Type:=msoControlButton)

En verder maakt u ook gebruik van de eigenschappen Caption, ToolTipText en Position. De con-stante msoBarFloating zorgt bijvoorbeeld voor een vrij boven het programmavenster zwevende werkbalk.

12.2 Functies toevoegen

U bent bekend met de ingebouwde functies van Excel. Een ingebouwde functie is niets anders dan een eenmaal vastgelegde gecompliceerde berekening die ook heel goed direct in formules op het werkblad uitgevoerd zou kunnen worden. Een functie maakt het gebruik echter eenvoudiger. Daarnaast is een functie slimmer dan conventi-onele formules; zie ook mijn boek Formules en Functies in Excel, eveneens uitgegeven door Pearson Education.

Als we bijvoorbeeld een gemiddelde willen berekenen van een reeks getallen en we doen dat met een conventionele formule, dan zullen er vreemde resultaten optreden als er in de reeks getallen bijvoorbeeld een cel is die per abuis geen getal, maar een tekst bevat. Een cel die leeg is (geen waarde bevat) zal als waarde nul meetellen. De inge-bouwde functie Gemiddelde gaat hier anders mee om; zie de afbeeldingen 12.8 en 12.9.

DB_Macros_boek.indb 306 10/11/06 12:00:39

Page 12: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

307

12 Excel aanpassen

Afbeelding 12.9Tekst is een probleem voor een conventionele formule.

Afbeelding 12.8Een lege cel wordt anders geïnterpreteerd.

DB_Macros_boek.indb 307 10/11/06 12:00:40

Page 13: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

308

MACRO’S EN VBA IN EXCEL de basis

Tekst leidt in het ene geval tot een fout, maar in het andere geval ziet u dat een functie de tekst negeert. Even buiten beschouwing gelaten of de manier waarop deze functie werkt wel of niet voordelig is, duidelijk is dat een functie meer intelligentie bevat dan een conventionele formule die op het oog hetzelfde doet. Waarom is dat zo? Een ingebouwde functie is geprogrammeerd in een programmeertaal die oneindig veel mogelijkheden biedt; iets waar u, aangekomen bij de laatste paragraaf van dit laatste hoofdstuk in dit boek, hopelijk inmiddels óók achter bent.

U kunt zelf een ingebouwde functie aan Excel toevoegen, waar de volgende stappen voor nodig zijn:

1 Programmeer de functie;

2 Test de werking grondig;

3 Neem de functiemacro op in een speciaal werkblad;

4 Bewaar dit werkblad in een speciaal bestandsformaat;

5 En in een speciale map op schijf.

Afbeelding 12.10Parameters vanuit Excel doorgeven naar een functie.

DB_Macros_boek.indb 308 10/11/06 12:00:41

Page 14: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

309

12 Excel aanpassen

12.2.1 Functie programmeren

Een functie heeft als bijzonderheid dat ze een functiewaarde kan teruggeven aan de aanroepende instantie. In dit geval is de aanroepende instantie een cel in een Excel-werkblad met een formule waarin de functie gebruikt wordt. Een aanroepende in-stantie zou echter ook heel goed een andere procedure kunnen zijn. De functie wordt gevoed met een of meer parameters. In de functiewizard ziet u deze parameters in stap 2 van de wizard. In afbeelding 12.10 ziet u hoe de parameters voor de functie Gemid-delde ingevuld worden.

Overigens zijn niet alle Excel-functies direct in VBA te benaderen.Voor de functies die we wel kunnen aanroepen, gebeurt dat met hun Amerikaanse functienaam.

Afbeelding 12.11 De resultaten van de werkbladfuncties.

Oefening 12.3 Functies in een Excel-werkblad versus een macro

1 Neem het werkblad uit afbeelding 12.11 over.

2 Vul in kolom E de formules met de functies in zoals ze als tekst in kolom G zijn afgebeeld.

3 Verifieer de uitkomsten.

4 Neem de volgende macro over in een moduleblad.

5 Start de macro en vergelijk de uitkomst met die in afbeelding 12.12.

C Sub MaandBedragHyphoteek() MsgBox "€ " & CStr(Round( _ Pmt(0.06 / 12, 360, 100000, 0, 0), 2))End Sub

Deze procedure geeft het maandbedrag van een lening weer en gebruikt drie VBA-functies die we ook in Excel kennen; zie ook tabel 12.2.

DB_Macros_boek.indb 309 10/11/06 12:00:42

Page 15: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

310

MACRO’S EN VBA IN EXCEL de basis

Afbeelding 12.12 Resultaat van een van de VBA-functies

Tabel 12.2 Enkele werkbladfuncties versus vergelijkbare VBA-functies

Excel Argumenten VBA Argumenten

TEKST (waarde;opmaak_tekst) CStr (expressie)

AFRONDEN (getal;aantal-decimalen) Round (expressie [,AantDecPosities])

BET (rente;aantal-termijnen;hw;tw;type_getal)

Pmt (rate, nper, pv[, fv[, type]])

De notatie in de functiewizard van Excel en in de helpbestanden van VBA is helaas niet gelijk. Zelfs binnen VBA is sprake van kennelijk haastwerk bij de vertaling; het ene is in het Nederlands, het andere in het Engels, soms vet gedrukt en soms weer cursief

Er is echter één belangrijk onderscheid tussen verplichte en niet verplichte argumen-ten. In Excel wordt dit aangegeven door de verplichte argumenten vet af te drukken en de niet verplichte niet. In VBA worden [niet verplichte argumenten] tussen rechte haken gezet.

DB_Macros_12.indd 310 10/11/06 12:20:39

Page 16: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

311

12 Excel aanpassen

Wanneer u zelf een werkbladfunctie ontwerpt, kunt u ook aangeven welke argumen-ten verplicht zijn en welke niet. Zonder de verplichte argumenten kan een functie niet werken en moet een foutmelding gegenereerd worden. Dit is overigens niet per se noodzakelijk omdat Excel deze taak op zich neemt . Als de niet verplichte argumenten achterwege gelaten worden, moet er een standaardwaarde ingevuld worden.

Bij het bekijken van afbeelding 12.13 ziet u in het bereik B4:C7 cellen gevuld met getallen. Alleen in C6 staat tekst en B6 is leeg. Laten wíj nu een eens een functie pro-grammeren die aan de volgende eisen voldoet: Het gemiddelde van waarden in een bereik moet berekend worden; Een lege cel mag niet meetellen voor het gemiddelde; Een cel met de waarde nul moet wél meegeteld worden; Een cel met een tekst mag geen aanleiding geven tot een fout; Het resultaat moet afgerond worden op een willekeurig aantal op te geven decima-

len; Wordt geen afronding opgegeven, dan moet er standaard afgerond worden op twee

decimalen.

Afbeelding 12.13 Werkblad bij oefening 12.4

In afbeelding 12.13 zijn in kolom G de gebruikte formules afgedrukt die in de formu-lecellen in kolom E gebruikt worden. In kolom E ziet u dus de resultaten van deze zelfgemaakte functie.

DB_Macros_boek.indb 311 10/11/06 12:00:43

Page 17: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

312

MACRO’S EN VBA IN EXCEL de basis

Oefening 12.4 Functiemacro programmeren

1 Neem uit het werkblad van afbeelding 12.13 het bereik B4:C9 over.

2 Neem de formules pas over als u de functiemacro gemaakt hebt.

3 Ga naar de VBA-editor en voeg de volgende programmacode toe aan een module:

C Function MijnGemiddelde(rngBereik As Range, _ Optional intAantalDecs As Integer = 2)'Declaraties Dim lngAantalGeldig As Long Dim sngTotaal As Single Dim objCel As Object'Initialisaties lngAantalGeldig = 0: sngTotaal = 0'Haal de inhoudvan alle cellen 1 voor 1 op For Each objCel In rngBereik If IsNumeric(objCel.Value) Then If Not (IsEmpty(objCel.Value)) Then lngAantalGeldig = lngAantalGeldig + 1 sngTotaal = sngTotaal + objCel.Value End If End If Next'Geef de functiewaarde terug naar het werkblad MijnGemiddelde = Round((sngTotaal / lngAantalGeldig), intAantalDecs)End Function

4 Ga naar het werkblad en start de functiewizard.

5 In de categorie Door gebruiker gedefinieerd zult u de functie aantreffen, maar u mag ook ge-woon de functie op de formulebalk invoeren.

Het bereik wordt in het argument van de functie doorgegeven aan de parameter rngBe-reik. De volgende parameter wordt voorafgegaan door het sleutelwoord Optional wat inhoudt dat deze parameter weggelaten mág worden. In dat geval krijgt intAantalDecs de waarde twee. Wordt de parameter in de werkbladformule wél gevuld, dan wordt die waarde gebruikt!

Onder de regel initialisaties ziet u iets merkwaardigs wat op zich niet zo heel belang-rijk is; de dubbele punt mag gebruikt worden om twee verschillende opdrachten op een regel te zetten.

DB_Macros_boek.indb 312 10/11/06 12:00:44

Page 18: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

313

12 Excel aanpassen

Er is een objectvariabele objCel gedefinieerd en die wordt gebruikt om één voor één langs alle cellen in het bereik te gaan en de waarde op te vragen via de eigenschap Value. Met de functies IsEmpty en IsNumeric wordt nagegaan of de cel niet leeg is en alleen getallen bevat. Als het om getallen gaat, wordt de inhoud steeds bij het reeds opgetelde totaal in sngTotaal gevoegd en wordt het aantal cellen dat een geldige waar-de bevat met één opgehoogd.

Tot slot ziet u hoe een functiewaarde teruggegeven kan worden naar een formule in het werkblad. Er wordt netjes afgerond op het aantal opgegeven decimalenof het stan-daard aantal decimalen.

Deze functie hebt u in een module gemaakt die bij een of andere werkmap hoort. Als deze werkmap gesloten is en de functie werd ook in een andere map toegepast, dan werkt deze niet meer en zult u de melding #NAAM! in de formulecel(len) zien. We kunnen natuurlijk deze functie in de persoonlijk macrowerkmap opnemen, maar er is ook een andere mogelijkheid.

12.2.2 Een invoegtoepassing maken

Een invoegtoepassing wordt via het menu Extra, Invoegtoepassingen aan Excel ge-koppeld en dan ook steeds geladen als Excel gestart wordt.

Oefening 12.5 Invoegtoepassing maken

1 Open een nieuwe werkmap.

2 Verwijder alle bladen in deze werkmap op een na. Dit blad kunt u gebruiken voor testdoeleinden of er informatie over de functiemacro’s in opnemen.

3 Ga naar de VBA-editor en voeg aan deze enkelbladige werkmap een module toe.

4 Verplaats de functiemacro met knippen-en-plakken naar deze module; zie afbeelding 12.14.

5 Open het dialoogvenster Eigenschappen via het menu Bestand. Vul het in; zie ook afbeelding 12.15. Deze informatie ziet u later terug in het dialoogvenster Invoegtoepassingen en in de func-tiewizard.

6 Sla de werkmap op schijf op.

7 Sla de werkmap nu opnieuw op, maar geef aan dat u de werkmap als Invoegtoepassing wilt bewaren; zie afbeelding 12.16. De map wordt nu direct in de map Invoegtoepassingen op schijf opgeslagen als xla-bestand.

DB_Macros_boek.indb 313 10/11/06 12:00:44

Page 19: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

314

MACRO’S EN VBA IN EXCEL de basis

Afbeelding 12.15Leg de details vast en vul de eigenschappen voor de werkmap in.

Afbeelding 12.14Functiemacro is verplaatst.

DB_Macros_boek.indb 314 10/11/06 12:00:46

Page 20: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

315

12 Excel aanpassen

Afbeelding 12.16Werkmap als invoegtoepassing opslaan.

8 Waarschijnlijk ziet u nu in het oorspronkelijke werkblad in de cellen waarin de functie Mijn-gemiddelde gebruikt werd, de foutmelding #NAAM?. Logisch, want de functiemacro is er niet meer. Deze hebt u in stap 4 immers ver-plaatst.

9 Sla de werkmap op en sluit Excel af.

10 Start het programma opnieuw en open de werk-map.

11 Kies in het menu Extra, Invoegtoepassingen…. Uw zelfgemaakte invoegtoepassing wordt keu-rig in de lijst vermeld en u kunt deze koppelen door er een vinkje voor te plaatsen; zie afbeel-ding 12.17.

12 Open de functiewizard en controleer dat de functie beschikbaar is; zie afbeelding 12.18.

Afbeelding 12.17De invoegtoepassing wordt aan Excel gekoppeld.

DB_Macros_boek.indb 315 10/11/06 12:00:46

Page 21: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

316

MACRO’S EN VBA IN EXCEL de basis

13 Ook de argumenten zijn bekend. U ziet dat de benamingen van de parameters als argument van de functie genoemd worden. Het kan dus helpen als u duidelijke namen gebruikt; zie afbeelding 12.19.

Afbeelding 12.19…evenals de noodzakelijke argumenten.

Afbeelding 12.18De functiewizard kent de functie nu…

DB_Macros_boek.indb 316 10/11/06 12:00:48

Page 22: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

317

12 Excel aanpassen

Afbeelding 12.20 Ook indien het verplichte argument ontbreekt, is er een foutmelding.

Wilt u de functiemacro na wijziging opnieuw als xla-bestand opslaan onder dezelfde naam, dan dient u eerst de invoegtoepassing te ontkoppelen omdat het xla-bestand op schijf vastgehouden (gelockt) wordt zodra Excel start.

KOPPELEN VAN EEN FUNCTIEMACRO

Behalve dat u via het menu Extra, Invoegtoepassingen een invoegmacro kunt koppelen, is het ook mogelijk het .xla-bestand gewoon te openen om zo de functies in het werkblad te laten werken. Ontkoppelt u de invoegtoepassing én is het .xla-bestand niet geopend, dan zijn er twee mogelijkheden:

Excel kan de locatie van het .xla-bestand vinden en zal op de formulebalk het volledige pad naar dit bestand en de functie daarin weergeven en de functies zullen werken.

Of het bestand kan niet gevonden worden, in welk geval er in de formulecellen een fout-melding zal verschijnen.

DB_Macros_boek.indb 317 10/11/06 12:00:48

Page 23: DB Macros boek · EXCEL AANPASSEN Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een eigen functie in de functiewizard. Een functie die we ook uit Excel

318

MACRO’S EN VBA IN EXCEL de basis

Opdracht 12.3 Macro voor uitgebreide voorwaardelijke opmaak

U weet dat met Voorwaardelijke opmaak in het menu Opmaak tot drie onderscheiden waardebe-reiken in een cel tot een bepaalde celopmaak kunnen leiden. Drie ís echter wat weinig. Probeert u eens een functie te maken die tien onderscheiden bereiken kan duiden. De waarde in een cel moet in de naastgelegen cel waarin deze functie in een formule gebruikt wordt grafisch weergegeven worden met sterretjes en bovendien moeten deze sterretjes steeds een andere kleur krijgen.

DB_Macros_boek.indb 318 10/11/06 12:00:49