Inleiding Visual Basic en VBA Karel Nijs 2009/01
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
Inleiding Visual Basic en VBA: intro Inleiding tot programmeren Visual Basic intro Constanten, variabelen, declaraties en arrays Operatoren Selecties en iteraties Functies en subroutines Werken met bestanden
Inleiding Visual Basic en VBA les 3 Constanten, variabelen, declaraties en arrays Functies en subroutines Werken met bestanden
Constanten, variabelen, declaraties en arrays 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
Inleiding Visual Basic en VBA les 3 Herhaling les 2: 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 End If MsgBox "Goedenacht!"
Inleiding Visual Basic en VBA les 3 Herhaling les 2: Besluitvormingsstructuren: Select Case 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
Inleiding Visual Basic en VBA les 3 Herhaling les 2: Lusstructuren: For iteller = 0 To 5... Loop For iteller = 0 To 5 Step 1... Loop iteller = 0 Do While ( iteller < 6)... iteller = iteller + 1 Loop iteller = 0 Do... iteller = iteller + 1 Loop While ( iteller < 6) iteller = 0 Do Until ( iteller >= 6)... iteller = iteller + 1 Loop
Inleiding Visual Basic en VBA les 3 Constanten, variabelen, declaraties en arrays Functies en subroutines Werken met bestanden
Constanten, variabelen, declaraties Arrays: en 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
Constanten, variabelen, declaraties en arrays Arrays: Voorbeeld: startpositie eindpositie Dim arrleden(1 To 5) As String Maakt een array aan van Strings arrleden arrleden(1) arrleden(2) arrleden(3) arrleden(4) arrleden(5)
Constanten, variabelen, declaraties en arrays Arrays: Voorbeeld: Dim arrleden(1 To 5) As String arrleden(1) = "joris" Maakt een array aan van Strings joris arrleden arrleden(1)
Constanten, variabelen, declaraties en 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!
Constanten, variabelen, declaraties en arrays Arrays multi- dimensionaal: Voorbeeld: Dim arrleden(1 To 5, 1 To 3) As String Maakt een array aan van arrays van Strings arrleden arrleden(1) arrleden(3) arrleden(5) arrleden(2) arrleden(4)
Constanten, variabelen, declaraties en arrays Arrays: Voorbeeld: Dim arrleden(1 To 5, 1 To 3) As String arrleden(1,2) = "joris" Maakt een array aan van Strings arrleden joris arrleden(1,2)
Constanten, variabelen, declaraties en arrays Arrays: Grootte later pas declareren: Dim arrleden() As String ReDim arrleden(20) As String Nuttig wanneer je de grootte op voorhand niet kent Grootte heraanpassen lukt niet: Dim arrleden(1 To 5) As String ReDim arrleden(20) As String
Constanten, variabelen, declaraties en 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 )
Selecties en iteraties For Each Next: Overlopen van een collectie Dim vitem As Variant Variant type verplicht Collectie; bv. array For Each vitem In arrleden Next... wordt uitgevoerd voor elk element in de collectie
Selecties en iteraties 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 Next MsgBox vitem Toont in deze volgorde: beer, Lego, bal en GI Joe
Selecties en iteraties Oefening 1: Maak een programma dat het totaal van een factuur berekent. In één array steek je de productnamen (String) In de andere array steek je de productprijzen (Double) Doel: toon het totaal van de factuur aan de gebruiker Verplichting: gebruik een For Each... Next Tips: Met For Each... Next kan je maar één collectie (hier: array) te gelijk overlopen Je hebt dus nog een hulpvariabele nodig: een extra teller
Selecties en iteraties Oefening 1: Oplossing:
Inleiding Visual Basic en VBA les 3 Constanten, variabelen, declaraties en arrays Functies en subroutines Werken met bestanden
Functies en subroutines Procedure = stuk code omsloten door Sub of End Sub Function End Function Procedures steken altijd in modules
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
Functies en subroutines Sub... End Sub Subroutine Géén terugkeerwaarde Uitbreken met: Exit Sub Voorbeeld: publieke toegang begin naam parameters Public Sub RijVooruit( )... If(... ) Then Exit Sub uitbreken... einde End Sub
Functies en subroutines Function... End Function Functie Met één terugkeerwaarde Type te specifiëren in functiebeschrijving Toekenning terugkeer- of functiewaarde door: <functienaam> = <waarde> Uitbreken met: Exit Function
Functies en subroutines Function End Function: Voorbeeld: naam parameters publieke toegang begin terugkeertype Public Function GeefSnelheid( ) As Double... einde If(... ) Then Exit Function... uitbreken GeefSnelheid = 25.3 End Function terugkeerwaarde toekennen
Functies en subroutines Parameters Soorten: geen, optionele en normale Bij zowel subroutines als functies Type zelf mee te geven Als ontbreekt Variant ~ variabelen: Moeten gedeclareerd worden Unieke naam met beperkingen Afspraak: CamelCase en Hungarian notation Scope = procedure zelf (na procedure is geheugen vrij) Dim keyword niet nodig Geen constanten
Functies en subroutines Procedure Parameters voorbeelden: Geen parameters: Sub Demo() Wel, met type: Sub Demo( s1 As String, s2 As String ) Wel, zonder type: Beide worden gedeclareerd als Variant Sub Demo( s1, s2 )
Functies en subroutines Procedure Parameters voorbeelden: Optionele, zonder standaardwaarde Als niet meegegeven standaardwaarde van type wordt gebruikt Bv. Integer 0 Sub Demo( Optional s1 As String ) Optionele, mét standaardwaarde Als niet meegegeven standaardwaarde van declaratie wordt gebruikt Sub Demo( Optional s1 As String = blah )
Functies en subroutines Procedure Parameters voorbeelden: MsgBox functie MsgBox "Dit is het bericht",, "Titel" MsgBox "Dit is het bericht", vbcritical + vbokcancel, "Titel"
Functies en subroutines Parameters Doorgeven: Voorbeeld: Public Sub RijVooruit( iafstand As Integer)... End Sub Call RijVooruit( 20 ) Call RijVooruit() Call RijVooruit( 20, 10 )
Functies en subroutines Oproepen Verschillende manieren: Bv. BerekenAfstand Bv. BerekenAfstand() Bv.Call BerekenAfstand Bv.Call BerekenAfstand() Bv.Call ZetSnelheid( 20 ) Met Call: Duidelijker dat je procedure oproept Haakjes () niet verplicht wanneer parameters ontbreken Enkel bruikbaar als je géén terugkeerwaarde verwacht!
Functies en subroutines Oproepen Als je een terugkeerwaarde hebt: Haakjes gebruiken! Call niet gebruiken bij oproepen Bv. waarde = InputBox( Geef getal ) Zonder terugkeerwaarde: Haakjes niet verplicht Bv. MsgBox Geef getal Bv. Call MsgBox("Dit is het bericht",, "Titel") Optionele parameters weglaten Bv. MsgBox Geef getal,, Titel
Functies en subroutines Oproepen Ook mogelijk om de parameters zelf te specifiëren Voorbeeld: MsgBox prompt:="dit is het bericht", _ title:="titel" Waarom Leesbaarder in sommige gevallen het nieuwe regel teken Geen komma s nodig bij het ontbreken van optionele parameters Bv. MsgBox Bericht,, Titel
Functies en subroutines Parameters - geavanceerd ByVal Optional. Specifies that the procedure can modify the underlying variable element in the calling code the same way the calling code itself can. Bv. Public Sub Demo( ByVal sparam1 As String ) ByRef Optional. Specifies that the procedure cannot replace or reassign the variable element underlying the corresponding argument in the calling code. Bv. Public Sub Demo( ByRef sparam1 As String ) ParamArray Optional. Specifies that the last parameter in the parameter list is an optional array of elements of the specified data type. This lets the calling code pass an arbitrary number of arguments to the procedure. Bv. Public Sub Demo( ParamArray saparams() As Variant ) Call Demo( "a", "b", 5, Date ) http://msdn.microsoft.com/en-us/library/cbs7z96t.aspx
Functies en subroutines Samenvatting Procedures kunnen parameters hebben Procedures hebben een scope Er zijn twee soorten procedures: Sub en Function Functies hebben een terugkeerwaarde Procedure parameters: Hebben een type Kunnen optioneel zijn Procedures kunnen op verschillende manieren opgeroepen worden
Inleiding Visual Basic en VBA les 3 Constanten, variabelen, declaraties en arrays Functies en subroutines Werken met bestanden
Werken met bestanden Tot hier toe: alle gegevens beschikbaar binnen Ms Excel Soms ook toegang tot bestanden nodig Ophalen van klantenlijst Kijken of een database(bestand) bestaat Tijdelijke log aanmaken en verwijderen toegang tot de buitenwereld
Werken met bestanden Mogelijkheden zijn legio: Kopiëren Verplaatsen Hernoemen Verwijderen Attributen uitlezen en aanpassen Toepasbaar op zowel bestanden als mappen
Werken met bestanden Sleutelwoorden voor acties op mappen: ChDir andere actieve map kiezen ChDrive andere drive kiezen CurDir huidige map opvragen Dir overzicht van bestanden in map krijgen MkDir map aanmaken RmDir map verwijderen
Werken met bestanden Opgelet! Je bent acties aan het doen op het bestandssysteem van je computer Met één regel kan je hele mappen verwijderen Ongedaan maken is niet meer mogelijk!
Werken met bestanden Oefening 2 Maak een functie BestaatMap() met twee parameters: Een mapnaam Een optionele logische waarde die zegt of de map aangemaakt moet worden als hij niet bestaat Standaard is deze False
Werken met bestanden Oefening 2 Als de map bestaat, wordt dit gemeld aan de gebruiker. Bv. baangemaakt = BestaatMap( c:\temp\ ) Als de map niet bestaat én er moet een map aangemaakt worden, wordt deze aangemaakt en daarna gemeld aan de gebruiker Bv.bAangemaakt = BestaatMap( c:\temp\blah, True )
Werken met bestanden Sleutelwoorden voor acties op bestanden: FileCopy bestand kopiëren Kill bestand verwijderen Name bestand hernoemen Sleutelwoorden voor acties op attributen: FileDateTime datum van laatste wijziging FileLen bestandsgrootte in bytes GetAttr attribuut opvragen geeft getal terug SetAttr attribuut instellen constante doorgeven
Werken met bestanden Attributen: SetAttr GetAttr Betekenis vbnormal 0 normaal vbreadonly 1 alleen-lezen vbhidden 2 verborgen vbsystem 4 systeembestand vbdirectory 16 map vbarchive 32 archiveren nodig vbalias 64 bestandsnaam is alias
Inleiding Visual Basic en VBA Niet behandeld in deze cursus: Error handling/trapping Datums Objecten Eigen klassen External libraries Recursiviteit Formulieren Properties Events OLE
Inleiding Visual Basic en VBA En nu? Verdere cursussen in OpenLeren: VBA met Ms Word VBA met Ms Access VBA met Ms Excell VBScript op websites http://www.w3schools.com/vbscript/default.asp Visual Basic zelf leren Vooral: oefenen, oefenen, oefenen,
Bedankt voor jullie aandacht!