Programmeren in Excel VBA beginners

Programmeren in Excel VBA beginners – les 1. • Visual Basic Intro. • De Visual Basic Editor (VBE). • Debuggen in VBA. • Macro's. • Programmeren in VBA...

39 downloads 1145 Views 949KB Size
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

Visual Basic

Visual Basic for Applications

VBscript

Visual Basic intro Source Code (HLL) VB

VB

COMPILER

VBA

Native Code

INTERPRETER HARDWARE

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

Subset Ms Word

Subset Ms Excel Subset Ms Access VBA Basisfunctionaliteit (Microsoft en anderen)

tekening uit boek "VBA voor Word, Excel en Access"

Subset Subset Product Product Y X

subset specifieke code

uniforme code

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: Project Bundeling van code Scope = Werkblad Bundeling van code Scope = Werkboek Bundeling van code Scope = Project Bv. module voor aansturing MindStorms

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

declaratie van variabelen vereist procedure wordt opgeroepen bij elke save

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _ Cancel As Boolean)

variabele declaratie

Dim a As Boolean a = MsgBox("Wil je écht opslaan?", vbYesNo) If a = vbNo Then Cancel = True End If End Sub

functie met terugkeerwaarde conditie die de variabele "a" test terugkeerwaarde opslaan

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.Print “We beginnen met de lus”

• 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)

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/aboutmacros-in-excel-HP005201201.aspx

• Tutorial: – http://www.helpwithpcs.com/tipsandtricks/microsoftexcel-macro-tutorial.htm

Oefening 1 • 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: With ... With ... End With End With

Slide op basis van cursus “Het gebruik van VBA in Ms Excel” van Theo Peek

Oefening 1 • • • • • • • • • • • • • • •

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).

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



Integer



Long



Double



Date



Object



String



Variant



...

true or false 16 bits -> van - 2^15 tot 2^15 -1 32 bits -> van - 2^31 tot 2^31 -1 64 bits -> van - 2^63 tot 2^63 -1 bestemd voor datums verwijzing naar object (bv. WorkSheet) tekengegevens (bv. "appel") 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 As



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

Programmeren in VBA > Variabelen •

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 • 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"

Declaratie als constante

MsgBox NAAM MessageBox toont "karel" NAAM = "nijs" End Sub

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 Bv. prijs – Soorten:

= operand operator operand = prijs

*

• Rekenkundig: – +, -, *, /, \, ^ en Mod – Bv. a + 5

• Vergelijking: – =, <, <=, >, >=, <>, is en like – Bv. If( 5 < prijs )

BTW

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. begin van de conditie

expressie moet valideren als "waar" -> true

If ( tegoed < 0 ) Then MsgBox "Gelieve te betalen!" End If einde van de conditie

wordt enkel uitgevoerd  expressie voldaan

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 If ( tegoed < 0 ) Then MsgBox "Gelieve te betalen!" End If If ( tegoed > 0 ) Then MsgBox "Correcte betaler!" End If

– Nadelen: • Veel typwerk • Niet duidelijk dat code bij elkaar hoort

Programmeren in VBA > Selecties en iteraties • If ... Then ... Else ... End If – Conditie – Als ... dan ..., anders ... – Bv. expressie moet valideren als "waar"  true If ( tegoed < 0 ) Then MsgBox "Gelieve te betalen!" begin van de andere optie

wordt enkel uitgevoerd  expressie voldaan

Else MsgBox "Correcte betaler!" End If

wordt 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:

Bv. (10 + 55) % 7 = 2 Kleine afwijking

– Maak een applicatie die: • Volgend bericht toont aan de gebruiker: – Als het resultaat = 0: "(+) % = Perfecte deling" – Als het resultaat < 3: "(+) % = Kleine afwijking" – Als het resultaat < 5: "(+) % = Grotere afwijking" – Alle andere gevallen: " is een te grote afwijking!"

• Testdata: – – – –

5 en 3 10 en 7 12 en 7 841 en 711

Programmeren in Excel VBA beginners – les 2

• Korte herhaling les 1 • Programmeren in Excel VBA – Select Case – Lussen

Bedankt voor jullie aandacht!