Programmeren in Excel VBA beginners - .karelnijs.be...
Transcript of Programmeren in Excel VBA beginners - .karelnijs.be...
Programmeren in Excel VBA
beginners
Karel Nijs
2010/09
Leswijze
• Eerst wat theorie
• Begeleid met (korte) oefeningen
– Ms Excel 2003
• Online hulp:– http://www.ozgrid.com/VBA/
– http://msdn.microsoft.com/en-us/library/sh9ywfdk(vs.80).aspx
– http://www.microsoft.com/technet/scriptcenter/topics/office/vba.mspx
– http://www.kbcopenleren.be/
• Offline hulp (op CD-ROM):– Boek "VBA voor Word, Excel en Access"
– VBA-handleiding - vanuit Excel.doc
• Korte pauze rond 20u
Programmeren in Excel VBA beginners – les 2
• Herhaling les 1
• Programmeren in VBA:
– Select Case
– Selecties en iteraties (vervolg)
• Het object Range
• Range > Verwijzen naar het juiste cellenbereik
• Programmeren in VBA:
– Selecties en iteraties (vervolg)
– Arrays
• Range > Opvullen en bewerken
Herhaling les 1
• Visual Basic Editor:
– Opstarten van de Visual Basic Editor (VBE):
1. Start Ms Excel
2. Toon de "Visual Basic" werkbalk
– Opstarten van de object browser:
– Code hinting met: CTRL+spatie
Herhaling les 1
• Variabelen:
– Variabele dient om gegevens op te slaan in het (vluchtige)
werkgeheugen
– Slechts geldig tijdens uitvoeren van het programma
– Verschillende gegevenstypes mogelijk:
• Boolean, Integer , Long, Double, Date, Object, String,
Variant, ...
– Beperkingen qua naamgeving
Herhaling les 1
• Variabelen:
– Declaratie afspraken:
• Naamgeving volgens combinatie CamelCase en Hungarian notation
– Bv. strElkWoordEenNieuweHoofdletter
• Altijd Option Explicit bovenaan elke code bestand
• Altijd een gegevenstype declareren
– Bv. Dim strMijnNaam As String
Herhaling les 1
• Varia:
– String concatenatie:
• Bv. “Mijnheer “ & strVoorNaam & strNaam
– Waardes tonen aan de gebruiker:
• Bv. MsgBox “Dit is het bericht”, , “Titel”
– Waardes vragen aan de gebruiker:
• Bv. strWaarde = InputBox(“Geef iets”, “Titel” )
– Meerdere declaraties op één regel:
• Bv. Dim iGetal1 As Integer, iGetal2 As Integer
– Commentaar met een enkele quote:
• Bv. ‘dit is commentaar en wordt genegeerd
Herhaling les 1
• Besluitvormingsstructuren:
• If … Then … End If
• If … Then … Else … End If
• If … Then … ElsIf … Else … End If
If ( tijd < 12u ) Then
MsgBox "Goedemorgen!"
ElseIf ( tijd < 15u ) Then
MsgBox "Goedemiddag!"
ElseIf ( tijd < 18u ) Then
MsgBox "Goede namiddag!"
ElseIf ( tijd < 22u ) Then
MsgBox "Goede avond!"
Else
MsgBox "Goedenacht!"
End If
Programmeren in Excel VBA beginners – les 2
• Herhaling les 1
• Programmeren in VBA:
– Select Case
– Selecties en iteraties (vervolg)
• Het object Range
• Range > Verwijzen naar het juiste cellenbereik
• Programmeren in VBA:
– Selecties en iteraties (vervolg)
– Arrays
• Range > Opvullen en bewerken
Programmeren in VBA > Selecties en iteraties
• Beslissen met besluitsvormingsstructuren
– If ... Then ... End If
– If ... Then ... Else ... End If
– If ... Then ... ElseIf ... Else ... End If
– Select Case
• Code herhalen met lusstructuren
– For ... Next
– For Each ... Next
– Do While ... Loop
– Do Until ... Loop
Programmeren in VBA > Selecties en iteraties
• Select case
– If ... Then ... ElseIf ... Else ... End If
• Toch niet zo overzichtelijk...
• Moeilijk onderhoudbaar
– Select case:
• Wanneer een voorwaarde (vele) verschillende opties
kan zijn
• Select Case � n statussen
• If Else � 2 statussen
Programmeren in VBA > Selecties en iteraties
• Select case
– Structuur:
Select Case voorwaarde
Case mogelijkheid1
...
Case mogelijkheid2
...
Case mogelijkheid3
...
Case Else
...
End Select
Programmeren in VBA > Selecties en iteraties
• Select case
– Voorbeeld:Dim iUur as Integer
iUur = InputBox("Welk uur is het?")
Select Case iUur
Case 8
MsgBox "Goedemorgen!"
Case 12
MsgBox "Goedemiddag!"
Case 16
MsgBox "Goede namiddag!"
Case Else
MsgBox "Hallo!"
End Select
slechts één van deze
mogelijkheden is geldig
als alle andere
mogelijkheden niet
geldig zijn
Programmeren in VBA > Selecties
en iteraties
• Oefening 1: (kort)
– Hermaak oefening 3 van les 1 met een Select Case
– Testdata:
• 58 en 4
• Oefening 1 - uitbreiding:
– Wat met de modulo's 1, 2 en 4?
– Meer informatie: http://www.ozgrid.com/VBA/select-
case.htm
Programmeren in VBA > Selecties en iteraties
• Select case
– Opmerkingen:
• Meerdere cases tegelijk behandelen:
– Bv. Case 5, 3, 10
• Een bereik behandelen:
– Bv. Case 1 To 3
– Bv. Case Is < 3
• Ook andere types mogelijk:
– Bv. Select Case strSport
Case "voetbal"
...
End Select
Programmeren in VBA > Selecties en iteraties
• Select case
– Opmerkingen:
• Als meerdere cases geldig zijn, dan wordt enkel de
eerste die aan de voorwaarde voldoet, uitgevoerd!
– Bv.
Dim i as integer
i = 2
Select Case
Case Is < 5
MsgBox "< 5"
Case Is < 3
MsgBox "< 3"
End Select
eerste case die voldoet
Programmeren in VBA > Selecties en iteraties
• Beslissen met besluitsvormingsstructuren
– If ... Then ... End If
– If ... Then ... Else ... End If
– If ... Then ... ElseIf ... Else ... End If
– Select Case
• Code herhalen met lusstructuren
– For ... Next
– For Each ... Next
– Do While ... Loop
– Do Until ... Loop
Programmeren in VBA > Selecties en iteraties
• Lusstructuren:
– Om een stuk code meerdere malen uit te voeren
– Omdat je ooit moet eindigen � grenzen instellen
• Start
• Einde
• Soorten:
– For ... Next
– Do While ... Loop
– Do Until ... Loop
Programmeren in VBA > Selecties en iteraties
• For ... Next
– Van ... tot ...
– Structuur:
– Eindgrens is inclusief
– Teller verhoogt standaard telkens met 1
• Stap is instelbaar (natuurlijke getallen):
For teller = beginpunt To eindpunt
...
Next
For teller = beginpunt To eindpunt Step 2
...
NextAndere voorbeelden: 100, -5, 7, -1, ...
wordt bij elke iteratie
uitgevoerd
Programmeren in VBA > Selecties en iteraties
• For ... Next
– Voorbeeld:
Dim beginpunt As Integer, eindpunt As Integer
Dim teller As Integer
beginpunt = 5
eindpunt = 10
teller = 0
For teller = beginpunt To eindpunt
MsgBox teller
Next
Toont: 5, 6, 7, 8, 9 én 10
geen step � standaard = 1
Programmeren in VBA > Selecties en iteraties
• For ... Next
– Stap vergroten:
Dim beginpunt As Integer, eindpunt As Integer
Dim teller As Integer, stapGrootte As Integer
beginpunt = 5
eindpunt = 10
teller = 0
stapGrootte = 2
For teller = beginpunt To eindpunt Step stapGrootte
MsgBox teller
Next
Toont enkel: 5, 7 en 9
• For ... Next
– Uitbreken:
• Vroegtijdig de lus afbreken
• Kan soms nuttig zijn
– Statement: Exit For
– Voorbeeld:
For teller = beginpunt To eindpunt
If( ... ) Then
Exit For
End If
Next
Programmeren in VBA > Selecties en iteraties
Programmeren in Excel VBA beginners – les 2
• Herhaling les 1
• Programmeren in VBA:
– Select Case
– Selecties en iteraties (vervolg)
• Het object Range
• Range > Verwijzen naar het juiste cellenbereik
• Programmeren in VBA:
– Selecties en iteraties (vervolg)
– Arrays
• Range > Opvullen en bewerken
Het object Range
• Range = bereik van cellen
– Eén cel
– Rij of kolom van cellen
– Tabel
– Willekeurige selectie van cellen
• Cel is basissteen van Ms Excel
– Data, draaitabellen, grafieken, ...
Slide op basis van cursus “Programmeren in Excel 2007 VBA” van Peter Demasure
Het object Range
• Objectstructuur:
– Een Range zit in een Worksheet dat in een Workbook zit:
• Range ∈ Worksheet ∈ Workbook
Workbook
Range van 1 cel
Worksheet
Het object Range
• Voorbeeld:
Slide op basis van cursus “Programmeren in Excel 2007 VBA” van Peter Demasure
Range("A1") = 50
Dim WB As Workbook
Dim WS As WorkSheet
Dim rngCel As Range
Set WB = ActiveWorkbook
Set WS = ActiveSheet
Set rngCel = WS.Range("A1")
rngCel = 50
beter!
Workbooks("Kalender.xls").Worksheets("Januari").Range("A1") = 50
nog beter!
perfect!
Het object Range
• Voorbeeld:
Slide op basis van cursus “Programmeren in Excel 2007 VBA” van Peter Demasure
Dim WB As Workbook
Dim WS As WorkSheet
Dim rngCel As Range
Set WB = Workbooks("Kalender.xls")
Set WS = WB.Worksheets("Januari")
Set rngCel = WS.Range("A1")
rngCel = 50
Dim WB As Workbook
Dim WS As WorkSheet
Dim rngCel As Range
Set WB = ActiveWorkbook
Set WS = ActiveSheet
Set rngCel = WS.Range("A1")
rngCel = 50
perfect!
Het object Range
• Uitleg bij voorbeeld:
– Standaard verwijst Range(“A1”) naar de cel A1 van het toevallig
actieve werkblad in het toevallig actieve werkboek
• Niet handig!
– Daarom:
• Altijd Workbook specifiëren
• Altijd Worksheet specifiëren
Het object Range
• For Each ... Next:
– Met VBA kan je collecties eenvoudig overlopen
– Bijvoorbeeld:
For Each cell in ActiveSheet.Cells
‘...
Next
collectietype Variant
Programmeren in Excel VBA beginners – les 2
• Herhaling les 1
• Programmeren in VBA:
– Select Case
– Selecties en iteraties (vervolg)
• Het object Range
• Range > Verwijzen naar het juiste cellenbereik
• Programmeren in VBA:
– Selecties en iteraties (vervolg)
– Arrays
• Range > Opvullen en bewerken
Range > Verwijzen naar het juiste
cellenbereik
• Verwijzen naar vast bereik via celadres
– Range( celadres )
– Rows( celadres )
– Columns( celadres )
Slide op basis van cursus “Programmeren in Excel 2007 VBA” van Peter Demasure
Range > Verwijzen naar het juiste
cellenbereik
Slide op basis van cursus “Programmeren in Excel 2007 VBA” van Peter Demasure
Range("5:5,8:8")Rij vijf en acht los van elkaar
Range("E:E,H:H")Kolommen vijf en acht, los van elkaar
Range("B4,E20")Cellen B4 en E20, los van elkaar
Rows("5:8")Rij vijf tot acht
Columns("E:H")Kolom vijf tot acht
Rows("5") of Rows("5:5") of
Range("F5").EntireRow
Vijfde rij
Columns("E") of Columns("E:E") of
Range("E3").EntireColumn
Vijfde kolom
Range("B4:E20") of
Range("B4","E20")
Vaste tabel van cel B4 tot en met cel E20
Range("C1")= "=A1 + B1"
Range("C1").Formula= "=Sum(A1:B1)"
De formule in cel C1 (eerste mogelijkheid)
De formule in cel C1 (tweede mogelijkheid)
Range("A1") = 5
Range("B1") = 3
Range("C1")=Range("A1")+Range("B1")
Het cijfermatig resultaat in cel C1
Range > Verwijzen naar het juiste
cellenbereik
• Verwijzen naar dynamisch bereik via celadres
– Getallen zijn makkelijker te manipuleren dan letters
– Verwijzen naar cel via: Cells( rij, kolom )
– Bijvoorbeeld:
• Vast: Range( “C5” )
• Dynamisch: Cells( 5, 3 )
– Alle cellen binnen een bereik overlopen:
• Cells( index )
Slide op basis van cursus “Programmeren in Excel 2007 VBA” van Peter Demasure
Range > Verwijzen naar het juiste
cellenbereik
Slide op basis van cursus “Programmeren in Excel 2007 VBA” van Peter Demasure
Range("A1").CurrentRegion.Rows(1)De veldnamenrij van een dynamische tabel
beginnend in de linkerbovenhoek van het werkblad
Rows(5).Resize(3,0)Rij vijf tot acht
Columns(5).Resize(0,3)Kolom vijf tot acht
Rows(5) of Cells(5,lngKolom).EntireRow
Rows(lngIndex) of Cells(lngRij,lngKolom).EntireRow
Vijfde rij
Dynamische rij
Columns(5) of Cells(lngRij,5).EntireColumn
Columns (lngIndex) of
Cells(lngIndex).EntireColumn
Vijfde kolom
Dynamische kolom
Range("A1").CurrentRegion
Cells(lngRij, lngKolom).CurrentRegion
Dynamische tabel opgemaakt in Excel
met vaste linkerbovenhoek en
met een dynamische linkerbovenhoek.
CurrentRegion verwijst naar het gebied dat
begrensd is door lege rijen en lege kolommen.
Cells(lngRs,lngKs).Resize(lngRij,lngKolom)Tabel opgemaakt in VBA met
variabel aantal cellen en vlottende bovenhoek
Range(Cells(1,1), Cells(lngRij,lngKolom)) of
Cells(1,1).Resize(lngRij,lngKolom)
Tabel opgemaakt in VBA met
variabel aantal cellen en vaste bovenhoek
Cells(lngRij, lngKolom)Dynamische celverwijzing
Cells(5,4)De cel met adres D5
Range > Verwijzen naar het juiste
cellenbereik
• Cellen en tabellen
– Vast bereik:
– Dynamisch bereik
– Dynamisch in Excel
Slide op basis van cursus “Programmeren in Excel 2007 VBA” van Peter Demasure
Set rngTabel = WS.Range("A1:E20")
Set rngTabel = WS.Cells(1,1).Resize(lngRij, lngKolom)
Set rngTabel = WS.Range("A1").CurrentRegion
• Open opgave les2_oef2_opgave.xls
• Maak een functie die de faculteit berekent
– Tip: Google: wiki faculteit
• Input getal:
– Mag niet hoger 15 zijn
• Output:
– Kolom B (vanaf B3) bevat de faculteit iteratie
– Kolom C (vanaf C3) bevat de n-de faculteit
• Gebruik named ranges en niet B1 en B3
– Tip: http://www.cpearson.com/excel/DefinedNames.aspx
• Koppel de macro aan een knop
– Tip: http://www.mrexcel.com/tip068.shtml
Oefening 2
• Oplossing:
• Uitbreiding:
– Bereken eerst de faculteit van 15 en dan van 5
• Wat gebeurt er (niet)?
• Los dit probleem op
– Vang alle speciale gevallen van de faculteit functie op
Oefening 2
Range > Verwijzen naar het juiste
cellenbereik
• Cellen en tabellen
– Dynamisch in Excel
Dim rngTabel as Range
Set rngTabel = WS.Range(“C6").CurrentRegion
Range(“C6”)
rngTabel
Slide op basis van cursus “Programmeren in Excel 2007 VBA” van Peter Demasure
Range > Verwijzen naar het juiste
cellenbereik
rngTabel.Resize(,rngTabel.Columns.Count + 1)
Een kolom toevoegen van de tabel
rngTabel.Resize(rngTabel.Rows.Count - 1).Offset(1).Columns(1)
De eerste kolom van datablok van de tabel
rngTabel.Resize(rngTabel.Rows.Count - 1).Offset(1)
Het datablok van de tabel
Set rngRij = rngTabel.Rows(rngTabel.Rows.Count).Offset(1)
De eerste rij onder de tabel (waar bijv. de som terecht komt)
Set rngCel = rngTabel.Columns(rngTabel.Columns.Count)
De laatste kolom van een tabel
Set rngCel = rngTabel.Cells(rngTabel.Cells.Count)
De laatste cel van een tabel
Set rngCel = rngTabel.Cells(1)
De eerste cel (linkerbovenhoek) van een tabel (dit kan een der welke cel zijn!)
Set rngCel = WS.Cells(1)
De eerste cel (linkerbovenhoek) van een werkblad (dit is steeds cel A1)
Programmeren in Excel VBA beginners – les 2
• Herhaling les 1
• Programmeren in VBA:
– Select Case
– Selecties en iteraties (vervolg)
• Het object Range
• Range > Verwijzen naar het juiste cellenbereik
• Programmeren in VBA:
– Selecties en iteraties (vervolg)
– Arrays
• Range > Opvullen en bewerken
Programmeren in VBA > Selecties en iteraties
• Beslissen met besluitsvormingsstructuren
– If ... Then ... End If
– If ... Then ... Else ... End If
– If ... Then ... ElseIf ... Else ... End If
– Select Case
• Code herhalen met lusstructuren
– For ... Next
– For Each ... Next
– Do While ... Loop
– Do Until ... Loop
Programmeren in VBA > Selecties en iteraties
• Do While ... Loop
– Doe zolang ...
– Structuur:
– Verschil met If Else:
• Geen ingebouwde grenzen
• Teller zelf te implementeren
– Voorwaarde zelf in te stellen in de body
Do While (voorwaarde = True)
...
Loop
wordt bij elke iteratie
uitgevoerd
Programmeren in VBA > Selecties en iteraties
• Do While ... Loop
– Voorbeeld:
• Zoek het grootste getal
• Getal -1 dient om te stoppen
Dim iGrootste As Integer, iIngave As Integer
iIngave = InputBox("Geef een getal in: ")
Do While ( iIngave <> -1 )
If( iIngave > iGrootste ) Then
iGrootste = iIngave
End If
iIngave = InputBox("Geef een getal in: ")
Loop
Programmeren in VBA > Selecties en iteraties
• Do While ... Loop
– Voorbeeld:
• Opmerking:
– Dubbele code!
Dim iGrootste As Integer, iIngave As Integer
iIngave = InputBox("Geef een getal in: ")
Do While ( iIngave <> -1 )
If( iIngave > iGrootste ) Then
iGrootste = iIngave
End If
iIngave = InputBox("Geef een getal in: ")
Loop
Programmeren in VBA > Selecties en iteraties
• Do ... Loop While
– Voorbeeld:
• Opmerking:
– Dubbele code!
• Oplossing: Do ... Loop While
Dim iGrootste As Integer, iIngave As Integer
Do
iIngave = InputBox("Geef een getal in: ")
If( iIngave > iGrootste And iIngave <> -1 ) Then
iGrootste = iIngave
End If
Loop While ( iIngave <> -1 )
Programmeren in VBA > Selecties en iteraties
• Do ... Loop While ...
– Doe zolang ...
– Structuur:
– Verschil met Do While ... Loop:
• Minstens één doorgang
Do
...
Loop While (voorwaarde = True)
wordt bij elke iteratie
uitgevoerd
Programmeren in VBA > Selecties en iteraties
• Beslissen met besluitsvormingsstructuren
– If ... Then ... End If
– If ... Then ... Else ... End If
– If ... Then ... ElseIf ... Else ... End If
– Select Case
• Code herhalen met lusstructuren
– For ... Next
– For Each ... Next
– Do While ... Loop
– Do Until ... Loop
Programmeren in VBA > Selecties en iteraties
• Do Until ... Loop
– Doe totdat ...
– Structuur:
– Verschil met Do While ... Loop:
• Andere stopvoorwaarde: 'zolang' ≠ 'totdat'
Do Until (voorwaarde = True)
...
Loop
wordt bij elke iteratie
uitgevoerd
Programmeren in VBA > Selecties en iteraties
• Do Until ... Loop
– Equivalenten:
iTeller = 0
Do Until ( iTeller >= 6)
...
iTeller = iTeller + 1
Loop
iTeller = 0
Do While ( iTeller < 6)
...
iTeller = iTeller + 1
Loop
For iTeller = 0 To 5
...
Loop
For iTeller = 0 To 5 Step 1
...
Loop
iTeller = 0
Do
...
iTeller = iTeller + 1
Loop While ( iTeller < 6)
Programmeren in VBA > Selecties
en iteraties
• Oefening 3: (kort)
– Hermaak oefening 2 met een
Do While ... Loop
– Testdata:
• 58 en 4
– Tip: oplossing in drie regels!
– Debug tip: als je PC hangt: CTRL+Break
Programmeren in Excel VBA beginners – les 2
• Herhaling les 1
• Programmeren in VBA:
– Select Case
– Selecties en iteraties (vervolg)
• Het object Range
• Range > Verwijzen naar het juiste cellenbereik
• Programmeren in VBA:
– Selecties en iteraties (vervolg)
– Arrays
• Range > Opvullen en bewerken
Programmeren in VBA > Arrays
• Arrays:
– = verzameling van dezelfde gegevens
– Bv. verzameling van Integers, Strings, Dates, Objects, …
– Elk element apart raadpleegbaar mbv. indexering
– ~ gewone variabelen:
• Moet gedeclareerd worden
– Unieke naam met beperkingen
– Afspraak: CamelCase en Hungarian notation
• Scope te bepalen:
– Private, Public of Dim
• Geen constanten mogelijk!
– http://www.ozgrid.com/forum/showthread.php?t=34314
Programmeren in VBA > Arrays
• Arrays:
– Voorbeeld:
– Maakt een array aan van Strings
Dim arrLeden(1 To 5) As String
arrLeden
arrLeden(1)
arrLeden(2)
arrLeden(3)
arrLeden(4)arrLeden(5)
startpositie eindpositie
Programmeren in VBA > Arrays
• Arrays:
– Voorbeeld:
– Maakt een array aan van Strings
joris
arrLeden
arrLeden(1)
Dim arrLeden(1 To 5) As String
arrLeden(1) = "joris"
Programmeren in VBA > Arrays
• Arrays:
– Startpositie is instelbaar
– Dim arrLeden(1 To 100) As String
• Start vanaf 1
• Gaat van 1 t/m 100
– Dim arrLeden(100) As String
• Start vanaf 0
• Gaat van 0 t/m 100
Opgelet: staat fout in boek!
Programmeren in VBA > Arrays
• Arrays – multi-dimensionaal:
– Voorbeeld:
– Maakt een array aan van arrays van Strings
arrLeden
Dim arrLeden(1 To 5, 1 To 3) As String
arrLeden(1)
arrLeden(2)
arrLeden(3)
arrLeden(4)
arrLeden(5)
Programmeren in VBA > Arrays
• Arrays:
– Voorbeeld:
– Maakt een array aan van Strings
arrLeden
arrLeden(1,2)
Dim arrLeden(1 To 5, 1 To 3) As String
arrLeden(1,2) = "joris"
joris
Programmeren in VBA > Arrays
• Arrays:
– Grootte later pas declareren:
– Nuttig wanneer je de grootte op voorhand niet kent
– Grootte heraanpassen lukt niet:
Dim arrLeden() As String
ReDim arrLeden(20) As String
Dim arrLeden(1 To 5) As String
ReDim arrLeden(20) As String
Programmeren in VBA > Arrays
• Arrays:
– Opvragen van de grenzen:
• Ondergrens: LBound( array )
• Bovengrens: UBound( array )
• Voorbeeld:
Dim arrLeden(4) As String
Dim arrWerknemers(0 To 4) As String
MsgBox LBound( arrLeden )
MsgBox LBound( arrWerknemers )
MsgBox UBound( arrLeden )
MsgBox UBound( arrWerknemers )
Programmeren in VBA > Arrays
• For Each … Next:
– Overlopen van een collectie
Dim vItem As Variant
For Each vItem In arrLeden
...
Next
wordt uitgevoerd voor elk
element in de collectie
Variant type verplicht
Collectie; bv. array
Programmeren in VBA > Arrays
• For Each … Next:
– Voorbeeld
Dim vItem As Variant
Dim saOrdersInFactuur(3) As String
saOrdersInFactuur(0) = “beer”
saOrdersInFactuur(1) = “Lego”
saOrdersInFactuur(2) = “bal”
saOrdersInFactuur(3) = “GI Joe”
For Each vItem In saOrdersInFactuur
MsgBox vItem
Next
Toont in deze volgorde:
beer, Lego, bal en GI Joe
Programmeren in Excel VBA beginners – les 2
• Herhaling les 1
• Programmeren in VBA:
– Select Case
– Selecties en iteraties (vervolg)
• Het object Range
• Range > Verwijzen naar het juiste cellenbereik
• Programmeren in VBA:
– Selecties en iteraties (vervolg)
– Arrays
• Range > Opvullen en bewerken
• Maak een nieuw werkboek aan: les1_oef4_oplossing.xls
• Maak onderstaand Lotto formulier aan
• Gebruik een aparte, herbruikbare procedure:
– MaakLottoFormulier()
– Private toegang
– Parameters: startcel, aantal kolommen en aantal rijen
– Deze procedure roep je op via een publieke procedure
procMain()
• Oplossing:
Oefening 4a
• Zorg ervoor dat de gebruiker via een knop getallen kan
aankruisen
• Maak hiervoor volgende procedures aan:
– public VoerGetalIn() �toont de InputBox
– private KruisAan() �kruist het getal aan
• Oplossing:
Oefening 4b
• Uitbreiding:
– Zorg dat je procedure MaakLottoFormulier() meerdere
formulieren kan aanmaken
– Wanneer je nu op de knop “Kies getal” klikt, kan je ook het
formulier kiezen
Oefening 4c
• Oplossing:
Oefening 4c
Range > Opvullen & bewerken
• Opmerkingen bij de oplossing:
– Automatisch opvullen van groot bereik met For lus is niet efficiënt
– Beter: formule gebruiken
• Zie les1_oef3d_oplossing.xls
Slide op basis van cursus “Programmeren in Excel 2007 VBA” van Peter Demasure
formule = (rij-index * aantal_kolommen)
+ kolomindex
Bijvoorbeeld: (1 * 6) + 1 = 7
Opgelet: rekening houden met offset: je
start niet altijd op rij 1, kolom 1!
6 kolommen
kolomindex
rij-index
Range > Opvullen & bewerken
• Opmerkingen bij de oplossing:
– Code herbruikbaar maken door ze in aparte procedures te steken
– Parameters:
• Optionele:
• Controleren of meegegeven is:
Private Sub test( param1 as Long, Optional param2 as Variant)
If ( IsMissing(param2) ) Then
param2 = “...”
End If
Slide op basis van cursus “Programmeren in Excel 2007 VBA” van Peter Demasure
Programmeren in Excel VBA beginners – les 3
• Herhaling les 1 + 2
• Range > Rijen verwijderen
• Werkmappen en werkbladen
• Het object Application
• Event macro's
• Excel 2003 vs. 2007
Bedankt voor jullie aandacht!