Programmeren in Excel VBA beginners - karelnijs.be · Toon de "Visual Basic" werkbalk 3. Docent...
Transcript of Programmeren in Excel VBA beginners - karelnijs.be · Toon de "Visual Basic" werkbalk 3. Docent...
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
Doel van deze cursus
VBA leren gebruiken
zodat je bepaalde
repetitieve handelingen
in Ms Excel 2003
kan automatiseren
Wat heb je hiervoor nodig?
• Weten hoe Excel werkt
• Weten hoe Excel intern werkt
• Macro’s kunnen opnemen
• Beperkte programmeerkennis
• Referentie: online of offline
• Vermogen om te interpreteren en af te leiden
• Gezond verstand
Programmeren in Excel VBA beginners
• Visual Basic Intro
• De Visual Basic Editor (VBE)
• Debuggen in VBA
• Macro’s
• Programmeren in VBA
• Het object Range
• User Defined Functions
• Werkmappen en werkbladen
• Het object Application
• Event macro's
• Excel 2003 vs. 2007
• Variabelen
• Constanten
• Operatoren
• Selecties en iteraties
• Arrays
• Functies en subroutines
Programmeren in Excel VBA beginners – les 1
• Visual Basic Intro
• De Visual Basic Editor (VBE)
• Debuggen in VBA
• Macro’s
• Programmeren in VBA
– Variabelen
– Constanten
– Operatoren
– Selecties en iteraties
Visual Basic intro
• Visual Basic for Applications (VBA)
– Afgeleide van VB
– Géén standalone taal, leeft bij host-applicatie
• Voorbeeld hosts: Ms Office, Visio, AutoCAD, ...
– Laat toe de host-applicatie aan te passen
– Gebruiksgemak: codegeneratie mbv. macro's
– Script-taal (géén compilatie)
Visual Basic intro
VBscript
Visual Basic
Visual Basic for Applications
Visual Basic intro
HARDWARE
INTERPRETER
Source Code (HLL)
COMPILER
Native Code
VB VB
VBA
slide van Peter Demasure
Visual Basic intro
• Subsets
– VBA is een gelaagde programmeertaal
– Basisfunctionaliteit is hetzelfde voor elke toepassing
– Elke toepassing heeft deelverzameling van instructies en
mogelijkheden
– Programmeren binnen de basislaag werkt in elke subset
– Subset A code werkt niet automatisch in Subset B
Visual Basic intro
• Subsets
VBA Basisfunctionaliteit(Microsoft en anderen)
Subset
Ms
Word
Subset
Ms
Excel
Subset
Ms
Access
Subset
Product
Y
Subset
Product
X
subset
specifieke
code
uniforme
code
tekening uit boek "VBA voor Word, Excel en Access"
Visual Basic intro
• Visual Basic for Applications: voordelen
– Gebruiksgemak (tov. VB): code generatie mbv. macro's
– Host-applicatie uitbreiden met niet-standaard mogelijkheden
– Repetitief werk automatiseren
– Vanuit één applicatie de andere besturen• Bv. Ms Word documenten aanmaken vanuit Ms Excel
Programmeren in Excel VBA beginners – les 1
• Visual Basic Intro
• De Visual Basic Editor (VBE)
• Debuggen in VBA
• Macro’s
• Programmeren in VBA
– Variabelen
– Constanten
– Operatoren
– Selecties en iteraties
De Visual Basic Editor (VBE)
• Ontwikkelingsomgeving beschikbaar in elke subset
• ~ editor voor Visual Basic
• De programmacode wordt opgeslagen bij je document � net zoals bij macro's!
• De VBE bevat alle hulpmiddelen voor programmatie
– Objecten browser
– Immediate window
– Debugger
– ...
De Visual Basic Editor (VBE)
• Demo - opstarten van de VBE:
1. Start Ms Excel
2. Toon de "Visual Basic" werkbalk
3. Docent geeft basisuitleg
• Demo – opstarten van de object browser
• Demo – het immediate window
De Visual Basic Editor (VBE)
• Scopes:
Bundeling van code
Scope = Project
Bv. module voor aansturing MindStorms
Bundeling van code
Scope = Werkboek
Project
Bundeling van code
Scope = Werkblad
Functies en subroutines
• Procedure
– Procedures steken altijd in modules
• ThisWorkBook en Bladx zijn eigenlijk ook modules!
– Scope of “toegang” of “aanroepbaarheid” of …
• Public
– Toegankelijk voor andere procedures buiten de module
– Bv. procedure om robot te besturen
• Private
– Enkel toegankelijk voor andere procedures binnen de module
– Code hiding
– Bv. (interne) procedure om de snelheid te berekenen
De Visual Basic Editor (VBE)
• De code:
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
Dim a As Boolean
a = MsgBox("Wil je écht opslaan?", vbYesNo)
If a = vbNo Then
Cancel = True
End If
End Sub
declaratie van variabelen vereist
procedure wordt opgeroepen bij elke save
variabele declaratie
functie met terugkeerwaarde
terugkeerwaarde opslaan
conditie die de variabele "a" test
Programmeren in Excel VBA beginners – les 1
• Visual Basic Intro
• De Visual Basic Editor (VBE)
• Debuggen in VBA
• Macro’s
• Programmeren in VBA
– Variabelen
– Constanten
– Operatoren
– Selecties en iteraties
Debuggen in VBA
• Verschillende methodes:
– Immediate window
– Debug.Print “...”
– Debug.Assert( statement )
– Breakpoints
– Door code stappen
– Locals window
– Watch window
• Uitgebreide uitleg: http://www.cpearson.com/excel/Debug.htm
Debuggen in VBA
• Het immediate window
– Of ook het “venster direct”
– Opstarten via Beeld > Venster direct
– Rechtstreeks uitvoeren van commando’s at design time
– Tutorial: http://www.lynda.com/home/TutorialLanding.aspx?lpk4=68857
Debuggen in VBA
• Debug.Print “”
– Tekst afdrukken naar het Debug window
– Enkel zichtbaar bij debuggen
– Hindert verdere programmatie niet
– Bv.
• Debug.Assert( statement )
– Evalueren van een statement
– Code stopt met uitvoeren als statement niet klopt
– Bv.Dim X As Long
X = 123
Debug.Assert (X < 100)
Debug.Print “We beginnen met de lus”
Debuggen in VBA
• Breakpoints
– Uitvoeren code pauzeert wanneer breakpoint bereikt wordt
– Vanaf dan kan je inspecteren en verder door de code stappen
• Door code stappen
– Vanaf een breakpoint
– Gebruik van werkbalk: Beeld > Werkbalken > Foutopsporing
Debuggen in VBA
• Locals window
– Geeft alle variabelen van de huidige procedure + de globale
variabelen weer
• Watch window
– Inspecteren en opvolgen van variabelen
Programmeren in Excel VBA beginners – les 1
• Visual Basic Intro
• De Visual Basic Editor (VBE)
• Debuggen in VBA
• Macro’s
• Programmeren in VBA
– Variabelen
– Constanten
– Operatoren
– Selecties en iteraties
Macro’s
If you perform a task repeatedly in Microsoft Excel, you
can automate the task with a macro.
A macro is a series of commands and functions that are
stored in a Microsoft Visual Basic module and can be
run whenever you need to perform the task.
For example, if you often enter long text strings in cells,
you can create a macro to format those cells so that
the text wraps.
Macro’s
• Waarom: – Opnemen van acties in Excel
– Ideaal voor als je niet weet hoe je iets moet programmeren
• Wat: – Een macro is net zoals een publieke procedure (Public Sub):
iedereen kan ze uitvoeren
• Voordelen– Eenvoudig
– Hergebruik
• Nadelen:– Code is niet generisch: vaak wordt er bv. gewerkt met Selection
– Nog steeds herwerk/tuning nodig
Macro’s
• Uitleg: – http://office.microsoft.com/en-gb/excel-help/about-
macros-in-excel-HP005201201.aspx
• Tutorial: – http://www.helpwithpcs.com/tipsandtricks/microsoft-
excel-macro-tutorial.htm
• Maak een nieuw werkboek aan les1_oef1_oplossing.xls
• Voer de stappen op de volgende slide uit
• Bestudeer de macro
– Hoe wordt commentaar aangeduid?
– Wat betekent: Application.CutCopyMode = False?
– Wordt er enkel het Font en het Pattern gewijzigd?
– Welke regels zouden er weg mogen?
– In welke gevallen zou je deze laten staan?
– Welke instellingen worden gemaakt met
Selection.Interior?
– Zorg dat je de With ... End With structuur begrijpt.
– Pas de code aan zodat je een With in een With gebruikt:
Oefening 1
Slide op basis van cursus “Het gebruik van VBA in Ms Excel” van Theo Peek
With ...
With ...
End With
End With
• Zet tien willekeurige waarden in de cellen A1:A10, bijvoorbeeld de
getallen 1, ..., 10;
• Start de Macro recorder met Tools > Macro > Record New Macro, geef
de macro de naam ErgSimpel en
• Bevestig met OK;
• In beeld verschijnt de Stop Recording Toolbar, zie Figuur 2.1;
• Figuur 2.1: Stop Recording Toolbar.
• Selecteer de cellen A1:A10;
• Copy deze (Ctrl-C);
• Selecteer cel C1;
• Paste (Ctrl-V);
• De selectie is nu C1:C10. Kies Format Cells (Ctrl-1) en kies op het
tabblad Font een blauwe kleur uit voor de letters;
• Kies het tabblad Patterns en kies een gele kleur uit als celachtergrond;
• Klik OK;
• Selecteer cel A1;
• Stop de macro recorder door op de Stopknop op de Stop Recording
Toolbar te klikken;
• Start de Visual Basic Editor (VBE) (ALT-F11).
Oefening 1
Slide op basis van cursus “Het gebruik van VBA in Ms Excel” van Theo Peek
Programmeren in Excel VBA beginners – les 1
• Visual Basic Intro
• De Visual Basic Editor (VBE)
• Debuggen in VBA
• Macro’s
• Programmeren in VBA
– Variabelen
– Constanten
– Operatoren
– Selecties en iteraties
Programmeren in VBA > Variabelen
• Variabelen
– Gegevens opslaan in geheugen
– Slechts geldig tijdens uitvoeren van het programma
– Verschillende gegevenstypes mogelijk:• Boolean true or false
• Integer 16 bits -> van - 2^15 tot 2^15 -1
• Long 32 bits -> van - 2^31 tot 2^31 -1
• Double 64 bits -> van - 2^63 tot 2^63 -1
• Date bestemd voor datums
• Object verwijzing naar object (bv. WorkSheet)
• String tekengegevens (bv. "appel")
• Variant kan alle types bevatten
• ...
Programmeren in VBA > Variabelen
• Variabelen
– Elke variabele heeft een unieke naam
• Conventies:
– Eerste teken moet letter zijn
– Spaties, punten en komma's zijn niet toegelaten
– Leestekens #, %, !, &, $ zijn niet toegelaten
– Max lengte = 254 karakters
• CamelCase + Hungarian notation:
– Bv. strElkWoordEenNieuweHoofdletter
• Voorbeeld:
– strNaamKlant
– iAantalJaren
Programmeren in VBA > Variabelen
• Declaraties
– Compiler informeren van bestaan: naam + gegevenstype
– Keywoord = Dim• Dim <naam> As <type>
• Bv. Dim strMijnNaam As String
– Niet verplicht om variabelen an sich te declareren
• Veroorzaakt errors bij ontbreken
• Afdwingen door Option Explicit boven elke code te zetten
– Eénmalig bovenaan in het bestand dat de code bevat
• Zie ook oefening 1
Programmeren in VBA > Variabelen
• Declaraties
– Niet verplicht om type te declareren
• In plaats van:
Dim strMijnNaam As String
schrijven:
Dim strMijnNaam
• Gevolgen:
– Wordt achterliggend als Variant gedeclareerd:
Dim strMijnNaam As Variant
– Variant kan álle types bevatten
– Nadelen:
» Trager
» Meer geheugengebruik (te vermijden)
Programmeren in VBA > Variabelen
• Declaraties
– 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
Programmeren in VBA > Variabelen
• Oefening 2:
– Pas de Workbook_BeforeSave methode aan zodat:
• Aan de gebruiker een eerste getal gevraagd wordt.
• Aan de gebruiker een tweede getal gevraagd wordt.
• Aan de gebruiker de som getoond wordt.
– Tips:
• Een waarde aan de gebruiker kan je opvragen met de
functie InputBox
• Om een bericht te tonen: zie oefening 1
• Oefening 2:
Programmeren in VBA > Variabelen
• Oefening 2 - uitbreiding:
– Pas oefening 2 aan zodat:
• Wanneer je een getal ingeeft het programma een
foutmelding toont en stopt
– Tips:
• De Information module in de VBA bibliotheek
Programmeren in VBA > Variabelen
Programmeren in VBA > Variabelen
• 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
Programmeren in VBA > Variabelen
• Declaratie – scope:
– Public:
• Declaratie op module niveau
• Beschikbaar binnen alle procedures in het project
• Bv. Public strNaam as String
– Private:
• Declaratie op module niveau
• Enkel beschikbaar binnen alle procedures in de module
• Bv. Private strNaam as String
Programmeren in Excel VBA beginners – les 1
• Visual Basic Intro
• De Visual Basic Editor (VBE)
• Debuggen in VBA
• Macro’s
• Programmeren in VBA
– Variabelen
– Constanten
– Operatoren
– Selectiestructuren: If ... Then ... ElseIf ... End If
Programmeren in VBA > Constanten
• Declaratie – scope:– Const:
• Constante � Waarde is niet wijzigbaar
• Afspraak: naam in HOOFDLETTERS
• Bv. Const NAAM as String = "karel"
• Voorbeeld:
Private Sub Demo()
Const NAAM As String = "karel"
MsgBox NAAM
NAAM = "nijs"
End Sub
MessageBox toont "karel"
Declaratie als constante
Programmeren in Excel VBA beginners – les 1
• Visual Basic Intro
• De Visual Basic Editor (VBE)
• Debuggen in VBA
• Macro’s
• Programmeren in VBA
– Variabelen
– Constanten
– Operatoren
– Selecties en iteraties
Programmeren in VBA > Operatoren
• Expressies
– = waarde of groep waarden die geëvalueerd wordt
– Resultaat = waarde van de expressie
– Bv.
• Waarde = 4 + 5
– Kunnen opgebouwd worden uit:
• Constanten, variabelen
• Operatoren
• Arrays en hun elementen (zie verder)
• Functies
Programmeren in VBA > Operatoren
• Expressies
– Kunnen opgebouwd worden uit:
• Constanten, variabelen:
– Bv. dPrijsInclusief = iPrijsExclusief * BTW
• Operatoren (zie volgende slide):
– Rekenkundige, vergelijkings, logische en samenvoegings
• Arrays en hun elementen (zie later):
– Bv. dPrijsInclusief = aPrijzenLijst(1) * BTW
• Functies:
– Bv. sNaam = InputBox(“Geef je naam in:”)
Programmeren in VBA > Operatoren
• Operatoren:
– Vergelijking:
waarde = operand operator operand
Bv. prijs = prijs * BTW
– Soorten:
• Rekenkundig:
– +, -, *, /, \, ^ en Mod
– Bv. a + 5
• Vergelijking:
– =, <, <=, >, >=, <>, is en like
– Bv. If( 5 < prijs )
Programmeren in VBA > Operatoren
• Operatoren:
– Soorten:
• Logisch:
– And, Or, Not, Xor, Eqv en Imp
– Bv. If( 5 < prijs And prijs < 10 )
• Samenvoeging:
– &
– Bv. MsgBox "Mijnheer " & naam
Programmeren in Excel VBA beginners – les 1
• Visual Basic Intro
• De Visual Basic Editor (VBE)
• Debuggen in VBA
• Macro’s
• Programmeren in VBA
– Variabelen
– Constanten
– Operatoren
– Selecties en iteraties
Programmeren in VBA > Selecties en iteraties
• Niet bij elk scenario moet elke code uitgevoerd
worden
– Bv. als de prijs 0 is, moet je geen factuur sturen
– Bv. als de prijs < 0 is, moet je een rode tekst tonen
• Sommige code moet meermaals achter elkaar
uitgevoerd worden
– Bv. het overlopen van alle orders op een factuur om het
totaal te berekenen
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
• If ... Then ... End If
– Conditie
– Als ... dan ...
– Bv.
If ( tegoed < 0 ) Then
MsgBox "Gelieve te betalen!"
End If
expressie moet valideren als "waar" -> true
wordt enkel uitgevoerd
� expressie voldaan
einde van de conditie
begin
van de
conditie
Programmeren in VBA > Selecties en iteraties
• If ... Then ... Else ... End If– Probleem: we willen ook iets (een alternatief) laten uitvoeren als niet
aan de voorwaarde voldaan is
– Nadelen:
• Veel typwerk
• Niet duidelijk dat code bij elkaar hoort
If ( tegoed < 0 ) Then
MsgBox "Gelieve te betalen!"
End If
If ( tegoed > 0 ) Then
MsgBox "Correcte betaler!"
End If
Programmeren in VBA > Selecties en iteraties
• If ... Then ... Else ... End If
– Conditie
– Als ... dan ..., anders ...
– Bv.
If ( tegoed < 0 ) Then
MsgBox "Gelieve te betalen!"
Else
MsgBox "Correcte betaler!"
End If
expressie moet valideren als "waar" � true
wordt enkel uitgevoerd
� expressie voldaanbegin
van de
andere
optiewordt enkel uitgevoerd
� expressie niet voldaan
Programmeren in VBA > Selecties en iteraties
• If ... Then ... ElseIf ... Else ... End If
– Wat met meerdere (> 2) alternatieven?
– Als ... dan ..., anders dan ..., ..., anders ...
– Structuur:
If ( voorwaarde1 = True ) Then
...
ElseIf ( voorwaarde2 = True ) Then
...
ElseIf ( voorwaarde3 = True ) Then
...
...
Else
...
End If
nog meer voorwaarden?
geen enkele voorwaarde voldaan
Programmeren in VBA > Selecties en iteraties
• If ... Then ... ElseIf ... Else ... End If
– Bv. 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 VBA > Selecties en
iteraties
• Debuggen
– = zoeken naar fouten in een programma
– Starten door een break point te plaatsen
– Vanaf dan: F8 voor elke volgende stap
– In VBE: View > Toolbars > Debug
Programmeren in VBA > Selecties en
iteraties
• Oefening 3:
– Maak een applicatie die:
• Een eerste getal vraagt aan de gebruiker
• Een tweede getal vraagt aan de gebruiker
• Een constante variabele met waarde 55 heeft
• Volgende berekening uitvoert:
– (getal1 + constant getal) modulo getal2
Programmeren in VBA > Selecties
en iteraties
• Oefening 1:
– Maak een applicatie die:
• Volgend bericht toont aan de gebruiker:
– Als het resultaat = 0:
"(<getal1>+<cte>) % <getal2> = <modulo> Perfecte deling"
– Als het resultaat < 3:
"(<getal1>+<cte>) % <getal2> = <modulo> Kleine afwijking"
– Als het resultaat < 5:
"(<getal1>+<cte>) % <getal2> = <modulo> Grotere afwijking"
– Alle andere gevallen:
"<modulo> is een te grote afwijking!"
• Testdata:
– 5 en 3
– 10 en 7
– 12 en 7
– 841 en 711
Bv. (10 + 55) % 7 = 2 Kleine afwijking
Programmeren in Excel VBA beginners – les 2
• Korte herhaling les 1
• Programmeren in Excel VBA
– Select Case
– Lussen
Bedankt voor jullie aandacht!