Programmeren in Excel VBA beginners - karelnijs.be · Toon de "Visual Basic" werkbalk 3. Docent...

Post on 25-Apr-2018

239 views 5 download

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!