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:
- ActiveCell.FormulaR1C1 =
"=DATE(R[-4]C,R[-3]C,R[-2]C)"
- ActiveCell.FormulaR1C1 =
"=SLN(1000000,50000,10)"
- ActiveCell.FormulaR1C1 =
"=INDEX({""Gent"",""09"";""Brugge"",""056""},2,2)"
Bemerk:
- de formule staat tussen
aanhalingstekens
- je gebruikt de Engelse functienaam
- 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:
- Als je bij het WorksheetFunction-object
een werkbladfunctie gebruikt die een verwijzing naar een
bereik vereist, moet u een Range-object opgeven.
- Bij een Range-object moet het verwijzingstype steeds A1
zijn.
- In het eerste voorbeeld is het verwijzingstype R1C1
gebruikt omdat de eigenschap 'FormulaR1C1' gebruikt is en
niet 'Formula'.
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: