Programmeren in Excel VBA beginners - .karelnijs.be...

70
Programmeren in Excel VBA beginners Karel Nijs 2010/09

Transcript of Programmeren in Excel VBA beginners - .karelnijs.be...

Page 1: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

Programmeren in Excel VBA

beginners

Karel Nijs

2010/09

Page 2: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 3: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 4: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 5: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 6: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 7: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 8: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 9: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 10: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 11: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 12: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

Programmeren in VBA > Selecties en iteraties

• Select case

– Structuur:

Select Case voorwaarde

Case mogelijkheid1

...

Case mogelijkheid2

...

Case mogelijkheid3

...

Case Else

...

End Select

Page 13: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 14: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 15: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 16: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 17: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 18: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 19: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 20: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 21: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 22: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

• 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

Page 23: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 24: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 25: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

Het object Range

• Objectstructuur:

– Een Range zit in een Worksheet dat in een Workbook zit:

• Range ∈ Worksheet ∈ Workbook

Workbook

Range van 1 cel

Worksheet

Page 26: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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!

Page 27: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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!

Page 28: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 29: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

Het object Range

• For Each ... Next:

– Met VBA kan je collecties eenvoudig overlopen

– Bijvoorbeeld:

For Each cell in ActiveSheet.Cells

‘...

Next

collectietype Variant

Page 30: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 31: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 32: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 33: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 34: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 35: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 36: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

• 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

Page 37: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

• 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

Page 38: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 39: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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)

Page 40: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 41: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 42: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 43: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 44: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 45: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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 )

Page 46: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 47: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 48: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 49: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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)

Page 50: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 51: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 52: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 53: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 54: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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"

Page 55: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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!

Page 56: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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)

Page 57: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 58: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 59: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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 )

Page 60: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 61: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 62: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 63: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

• 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

Page 64: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

• 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

Page 65: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

• 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

Page 66: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

• Oplossing:

Oefening 4c

Page 67: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 68: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 69: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

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

Page 70: Programmeren in Excel VBA beginners - .karelnijs.be v6.1karelnijs.be/Projects/OPENLEREN_Programmeren_in_Excel_VBA... · Programmeren in Excel VBA beginners –les 2 • Herhaling

Bedankt voor jullie aandacht!