Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdAlbert Desmet Laatst gewijzigd meer dan 10 jaar geleden
1
DB&SQL8- 1 VBA Visual Basics for Applications: eigen Office versie vanaf Office2000 gelijk voor alle applicaties Programmeren onder meer nodig voor Het schrijven van eigen functies om invoer te controleren, categorieën te vormen of waarden te berekenen Eventafhandeling Een directe toegang tot de databaseobjecten Access kent ook macro’s als tussenvorm. Deze worden waarschijnlijk in volgende versies niet meer ondersteund, we zullen er daarom niet mee werken.
2
DB&SQL8- 2 Waar staan je functies/procedures? VBA code kan staan in een class-module: in het codeblok behorend bij een formulier in het codeblok behorend bij een rapport te vinden via het icoon Code op de taakbalk bij het betreffende tabblad of in Design View VBA code kan ook staan in een algemene module voor procedures en functies die vanuit de gehele database toegankelijk zijn te vinden/ maken onder het tabblad Modules
3
DB&SQL8- 3 Programmeren in VBA Algemene syntaxregels VBA: Statements beeindig je via ENTER-toets Als een te lang statement naar de volgende regel moet doorlopen, geef je dat aan met _ (spatie + underscore) Een ' geeft aan dat de rest van de regel commentaar is Practicum regels: Gebruik Option Explicit Geef je variabelen een prefix mee met datatype Geef voldoende commentaar bij je programma (met ' )
4
DB&SQL8- 4 Datatypering Expliciete datatypering: goede programmeerstijl In de Access Modules wordt dit afgedwongen via OPTION EXPLICIT (default) bovenin Datatypering variabelen: Public intBookCount As Integer (public var.) Dim strTitle As String(local var.) Naast variabelen kun je ook constanten definiëren: Const OurCompany = “The Greatest” Const MaxSalary = 100.000
5
DB&SQL8- 5 Datatypen in VBA (wat voorbeelden) prefixVar TypeSizeRange of values blnBoolean1 byteTrue or False intInteger2 bytes-32.768 - +32.767 lngLong4 bytes± 2.147.483.647 dblDouble8 bytes± 3.4E38 curCurrency8 bytesscaled integer(4dec) dtmDate/Time8 bytes1/1/100-12/31/9999 strStringvar: 10 + lng<= 2 billion char fixed: lngup to 65.400 char varVariant16 bytesNumber: as Double 22 b + lngString: as String
6
DB&SQL8- 6 Functies en procedures schrijven Je schrijft eigen functies/procedures dus in algemene modules of in class modules. De editor biedt hulp door het aanbieden van mogelijke invullingen (keuzelijsten: OK, klik Tab) en het melden van fouten. Na elk statement geef je een ENTER Met spatie + underscore ( _) geef je aan dat een statement nog doorloopt op de volgende regel In het Debug Window (onder View) kun je je functie of procedure direct testen. Access 2000: Immediate Window.
7
DB&SQL8- 7 Functie - Subroutine Function (argumenten met datatype) As code, (evt.) leidend tot = ….. End function Functies kunnen een waarde als resultaat geven Sub (argumenten met datatype) code End Sub Subroutines regelen acties Functies en subroutines kunnen vanuit andere functies of sub procedures worden aangeroepen
8
DB&SQL8- 8 Voorbeeld van een functie Function intOppervlak (intLengte As Integer, intBreedte _ As Integer) As Integer intOppervlak = intLengte * intBreedte End Function Dus: datatypering van argumenten en resultaat resultaat in de variable Statements eindigen door een RETURN, een spatie + underscore is het teken dat een statement doorloopt naar de volgende regel
9
DB&SQL8- 9 Voorbeeld van sub procedures Sub Welkom() Debug.Print "Hallo! Welkom!" End Sub Sub Welkom(strNaam As String) Debug.Print "Hallo " & strNaam & "!" End Sub Datatypering van eventuele argumenten Geen waarde als uitvoer, maar acties. NB Debug.Print is geen ‘normale’ opdracht voor in een applicatie, maar kun je gebruiken om je code te testen!
10
DB&SQL8- 10 Testen van functies en procedures Functie: in het Debug-Window aan te roepen: ? (arg1, arg2)vraagteken + haakjes Sub: zonder argumenten: door cursor in code te zetten en Run:Go te klikken met argumenten: in Debug-Window: arg1, arg2 zonder meer! ofCall (arg1, arg2)
11
DB&SQL8- 11 HELP Als je een VBA functie of constante in hebt getikt en de cursor erop staat krijg je via F1 direct informatie NB: Help in practicumzalen werkt niet altijd! Als je een bestaande functie of procedure aan het intikken bent in module zelf of in Debug (Immediate) Window krijg je direct informatie over de parameters Via de Object Browser kun je allerlei informatie vinden
12
DB&SQL8- 12 If... Then If Condition Then statements ElseIf AnotherCondition Then statements (meerdere ElseIf mogelijk) Else statements End If Sub testIfThen (intCijfer As Integer) If intCijfer >= 7 Then Debug.Print “Prima” ElseIf intCijfer >= 5 Then Debug.Print “Kon beter” Else Debug.Print “Overnieuw!” End If End Sub
13
DB&SQL8- 13 Case statement SyntaxVoorbeeld Select Case VarNameSelect Case intLeeftijd Case Value1Case Is < 12 StatementsstrCat=“kind” Case Value2To Value4Case 12 To 17 StatementsstrCat=“puber” Case Is Case 18 StatementsstrCat=“grens” Case ElseCase 19 To 64 StatementsstrCat=“volw” End Select Case Else strCat=“oudere” End Select
14
DB&SQL8- 14 Een categoriseringsfunctie (b.v. voor in SQL!) Function strCat(intLeeftijd As Integer) As String Select Case intLeeftijd Case Is < 12 strCat=“kind” Case 12 To 17 strCat=“puber” Case 18 strCat=“grens” Case Else strCat=“volwassene” End Select End Function SQL: SELECT naam, strCat(Leeftijd) FROM Personen
15
DB&SQL8- 15 Do while / Do until Do {While | Until} Condition statements Loop (test vóór de eerste uitvoering van statements) Do statements Loop {While | Until} Condition (test na de eerste uitvoering van statements) OF
16
DB&SQL8- 16 Voorbeeld van Do While (1) Sub Tafelvan3() Dim intTeller As Integer intTeller = 1 Do While intTeller <= 10 Debug.Print intTeller; " x 3 = ” ; intTeller * 3 intTeller = intTeller + 1 Loop End Sub Kun je nu ook een gevraagde tafel (parameter) af laten drukken? En alle tafels laten afdraaien? concatenatie: je kunt hierkiezen tussen & of ;
17
DB&SQL8- 17 Voorbeeld van Do While (2) Sub Wachten() Dim d1 As Date Dim d2 As Date d1 = Now() d2 = Now() Debug.Print "Even pauze.." Do While DateDiff("s", d1, d2) < 5 d2 = Now() Loop Debug.Print "Ga maar verder!" End Sub
18
DB&SQL8- 18 MsgBox MsgBox Messagestring Dim StrName AS String strName = “Margreet” MsgBox (“Goedemorgen “ & strName & “!”) of MsgBox “Goedemorgen “ & strName & “!”
19
DB&SQL8- 19 MsgBox met andere knoppen Default heeft een MsgBox alleen een OK knop (vbOKOnly), maar zijn meer mogelijkheden: MsgBox(Prompt, Icon + Buttons, Titel) door drukken van een button krijg je een resultaat! Sub ShowMesBox(StrName) If MsgBox("Ben jij " & StrName & "?", vbYesNo + _ vbQuestion, "Naamcontrole") = vbYes Then MsgBox "OK" End If End Sub + vbQuestion, vb Exclamationicoon + vbYesNO, vbRetryCancelknoppen
20
DB&SQL8- 20 Inputbox InputBox Messagestring: een functie met een resultaat! Sub testInputBox() Dim strResponse As String, strMsg As String strMsg = “Tik hier je naam” strResponse = Inputbox(strMsg) If strResponse <> “” Then MsgBox “Goedemorgen “ & strResponse & “!” End If End Sub
21
DB&SQL8- 21 Inputbox 2 Meer mogelijkheden met InputBox: InputBox(prompt, title, default) InputBox(“Hoe heet je?”, Naam, strDefaultnaam) strDefaultnaam: bijvoorbeeld degene die het laatst het programma gebruikt heeft
22
DB&SQL8- 22 For.... Next For range-of-values-of-var statements Next value-of-var Voorbeeld: Dim intTeller As Integer For intTeller = 1 To 10 Debug.Print intTeller Next intTeller en nu de tafels?
23
DB&SQL8- 23 For.... Next toepassing Sub PrintTafels() Dim intTeller1 As Integer Dim intTeller2 As Integer For intTeller1 = 1 To 10 Debug.Print "Tafel van " & intTeller1 For intTeller2 = 1 To 10 Debug.Print intTeller2 & " x " & intTeller1 & " = " & intTeller2 * intTeller1 Next intTeller2 Next intTeller1 End Sub
24
DB&SQL8- 24 For.... Next/ For Each For range-of-values-of-var statements Next value-of-var Dim intArray(1 To 10) As Integer Dim i As Integer Dim varIdx As Variant For i = 1 to 10 intArray(i) = i Next i For Each varIdx In intArray Debug.Print 2 * varIdx Next varIdx verplicht type voor For Each!
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.