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.
DB_Macros_boek.indb 296
10/11/06 12:00:31
Wat leert u in dit hoofdstuk? Een eigen menu aan de Excel-menubalk toevoegen. Een functie die we ook uit Excel kennen in een macro toepassen. Een eigen functie in de functiewizard.
DB_Macros_boek.indb 297
10/11/06 12:00:33
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 Excel 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 stekker 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 Verkenner, 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 raadpleegt 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; 298
DB_Macros_boek.indb 298
10/11/06 12:00:34
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 afbeelding 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 rechter muisknop op het menu of de keuze en geef achter Naam: de menunaam op. U kunt een ampersand ( & ) 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 geselecteerd 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.
299
DB_Macros_boek.indb 299
10/11/06 12:00:34
MACRO’S EN VBA IN EXCEL de basis
Afbeelding 12.1 Nieuw menu aan de menubalk toevoegen.
Afbeelding 12.2 Menukeuze aan het menu toevoegen.
300
DB_Macros_boek.indb 300
10/11/06 12:00:35
12 Excel aanpassen
Afbeelding 12.3 Menunaam opgeven.
Afbeelding 12.4 Macro toekennen.
301
DB_Macros_boek.indb 301
10/11/06 12:00:36
MACRO’S EN VBA IN EXCEL de basis
Op soortgelijke wijze kunt u knoppen aan de menubalk of een van de werkbalken toevoegen. In afbeelding 12.5 ziet u dat knoppen uit de categorie Macro’s gehaald kunnen 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 Excelmenubalk is. Het CommandBar-object bezit een Controls-verzameling. Deze bevat in eerste instantie 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 C
Het menumysterie
Sub WisMenus() Dim intT As Integer For intT = 1 To 10
302
DB_Macros_boek.indb 302
10/11/06 12:00:37
12 Excel aanpassen
Application.CommandBars(1) _ .Controls.Item(intT).Visible = False Next End Sub Sub ZetMenusTerug() Dim intT As Integer For intT = 1 To 10 Application.CommandBars(1) _ .Controls.Item(intT).Visible = True Next End 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 klikken; 3 Als u daarbij de VBA-editor iets verkleint zoals in afbeelding 12.6 en de muis boven de telvariabele 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.6 Menu’s verbergen.
303
DB_Macros_boek.indb 303
10/11/06 12:00:37
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 verschillende methoden en eigenschappen om met menu’s te werken. Tabel 12.1 Item
Overzicht van methoden en eigenschappen 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 – msoControlDropDown.
Id
Wordt deze parameter weggelaten dan wordt een leeg besturingselement van het opgegeven type toegevoegd. Een waarde voegt een van de ingebouwde 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 verwijderd 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.
304
DB_Macros_boek.indb 304
10/11/06 12:00:38
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.Count End 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 eigenschap 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").Delete End 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 0 End Sub
Voeg deze uitbreiding pas toe als alles foutloos werkt. Met On
Error Resume Next zegt u ’Ga
305
DB_Macros_boek.indb 305
10/11/06 12:00:39
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.7 Het 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 constante 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 conventionele 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 ingebouwde functie Gemiddelde gaat hier anders mee om; zie de afbeeldingen 12.8 en 12.9. 306
DB_Macros_boek.indb 306
10/11/06 12:00:39
12 Excel aanpassen
Afbeelding 12.8 Een lege cel wordt anders geïnterpreteerd.
Afbeelding 12.9 Tekst is een probleem voor een conventionele formule.
307
DB_Macros_boek.indb 307
10/11/06 12:00:40
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.10 Parameters vanuit Excel doorgeven naar een functie.
308
DB_Macros_boek.indb 308
10/11/06 12:00:41
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 Excelwerkblad met een formule waarin de functie gebruikt wordt. Een aanroepende instantie 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 Gemiddelde 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.
309
DB_Macros_boek.indb 309
10/11/06 12:00:42
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;aantaltermijnen;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 argumenten. 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. 310
DB_Macros_12.indd 310
10/11/06 12:20:39
12 Excel aanpassen
Wanneer u zelf een werkbladfunctie ontwerpt, kunt u ook aangeven welke argumenten 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 programmeren 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 decimalen; 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 formulecellen in kolom E gebruikt worden. In kolom E ziet u dus de resultaten van deze zelfgemaakte functie.
311
DB_Macros_boek.indb 311
10/11/06 12:00:43
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 gewoon de functie op de formulebalk invoeren. Het bereik wordt in het argument van de functie doorgegeven aan de parameter rngBereik. 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 belangrijk is; de dubbele punt mag gebruikt worden om twee verschillende opdrachten op een regel te zetten. 312
DB_Macros_boek.indb 312
10/11/06 12:00:44
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 waarde 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 standaard 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 gekoppeld 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 functiewizard. 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.
313
DB_Macros_boek.indb 313
10/11/06 12:00:44
MACRO’S EN VBA IN EXCEL de basis
Afbeelding 12.14 Functiemacro is verplaatst.
Afbeelding 12.15 Leg de details vast en vul de eigenschappen voor de werkmap in.
314
DB_Macros_boek.indb 314
10/11/06 12:00:46
12 Excel aanpassen
Afbeelding 12.16 Werkmap als invoegtoepassing opslaan.
8 Waarschijnlijk ziet u nu in het oorspronkelijke werkblad in de cellen waarin de functie Mijngemiddelde gebruikt werd, de foutmelding #NAAM?. Logisch, want de functiemacro is er niet meer. Deze hebt u in stap 4 immers verplaatst. 9 Sla de werkmap op en sluit Excel af. 10 Start het programma opnieuw en open de werkmap. 11 Kies in het menu Extra, Invoegtoepassingen…. Uw zelfgemaakte invoegtoepassing wordt keurig in de lijst vermeld en u kunt deze koppelen door er een vinkje voor te plaatsen; zie afbeelding 12.17. 12 Open de functiewizard en controleer dat de functie beschikbaar is; zie afbeelding 12.18.
Afbeelding 12.17 De invoegtoepassing wordt aan Excel gekoppeld.
315
DB_Macros_boek.indb 315
10/11/06 12:00:46
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.18 De functiewizard kent de functie nu…
Afbeelding 12.19 …evenals de noodzakelijke argumenten.
316
DB_Macros_boek.indb 316
10/11/06 12:00:48
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 foutmelding zal verschijnen.
317
DB_Macros_boek.indb 317
10/11/06 12:00:48
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 waardebereiken 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.
318
DB_Macros_boek.indb 318
10/11/06 12:00:49