8.8 Excel-werkbladfuncties in VBA en VBA-functies

Je kan werkbladfuncties in macro's gebruiken. Dit kan op 2 manieren: je kan een Excel-werkbladfunctie vanuit VBA aanroepen of een Excel-werkbladfunctie invoegen in een cel.

a) een Excel-functie invoegen in een cel:

Voorbeelden:
  1. ActiveCell.FormulaR1C1 = "=DATE(R[-4]C,R[-3]C,R[-2]C)"
  2. ActiveCell.FormulaR1C1 = "=SLN(1000000,50000,10)"
  3. ActiveCell.FormulaR1C1 = "=INDEX({""Gent"",""09"";""Brugge"",""056""},2,2)"

Bemerk:

  1. de formule staat tussen aanhalingstekens
  2. je gebruikt de Engelse functienaam
  3. aanhalingstekens bij argumenten worden verdubbeld

Om het Engels equivalent van een werkbladfunctie te vinden neem je best een macro op waarin je de functie gebruikt. In de macrotekst krijg je de vertaalde functienaam.

b) een Excel-functie aanroepen vanuit VBA

In Visual Basic zijn een beperkt aantal Excel-werkbladfuncties beschikbaar via het WorksheetFunction-object. De methoden van dit object zijn alle Excel-functies die in VBA kunnen gebruikt worden. Kan je ze opzoeken?

Onderstaande regels geven hetzelfde resultaat. De functie VLookup is het equivalent voor VERT.ZOEKEN.
ActiveCell.FormulaR1C1 = "=vlookup(""b"",R1C1:R3C2,2)"
ActiveCell.FormulaR1C1 = WorksheetFunction.VLookup("b", Range("A1:B3"), 2)

Opmerkingen:

c) VBA-functies

  • VBA beschikt ook over een aantal functies. Deze zijn ook ingedeeld in groepen of beter: ze horen thuis in klassen. Je vindt een overzicht wanneer je in de VBA-omgeving de knop 'Objectenoverzicht ' aanklikt.

  • Selecteer linksboven de bibliotheek VBA uit de keuzelijst en je krijgt onderaan 2 lijsten: een met klassen en een met leden.

  • Hiernaast zie je de 'klasse' Strings met al haar leden. Dit zijn de functies die je ook terugvindt bij de functiewizard in een Excel-werkblad bij de groep 'Tekst'. Je merkt ook wel dat er hier zelfs nog veel meer staan.

  • Selecteer een 'lid' en klik op linksboven om in het helpscherm te komen.

  • Linksboven in het venster 'Objectenoverzicht' kan je andere bibliotheken selecteren zoals uiteraard Excel. De klassen moet je dan interpreteren als objectcategorieën, de leden als eigenschappen. Experimenteer hiermee!
  • De eerste van de klassen is steeds 'globalen'. Wanneer je deze selecteert krijg je de eigenschappen en methoden te zien die je zonder objectaanduiding kan gebruiken
  • Je kan ook een term zoeken door deze in het tweede vakje linksboven te typen. Je zoekt in één of in alle bibliothen tegelijk. Zo kan je te weten komen welke verschillende betekenissen dezelfde term kan hebben.

VBA-functies maken uiteraard geen gebruik van de aanduiding WorksheetFunction. Verder kan je de klassenaam vòòr de functienaam schrijven maar dit moet niet: Strings.Left("azerty",2) en Left("azerty",2) geven hetzelfde resultaat.

Een VBA-functie kan zelfs dezelfde naam hebben als een Excel-werkbladfunctie. De VBA-functie Left(Range("B1"),2) geeft de 2 eerste tekens van de inhoud van cel B1 terwijl Range("B1").Left de afstand vanaf de linkerrand van kolom A tot de linkerrand van kolom B weergeeft. Deze is uitgedrukt in pixels.

Oefeningen: