Programmeren in VB&VBA
Wat is VB? VB is de afkorting voor Visual Basic. Dit is een programmeertaal ontworpen door Microsoft om een alternatief te bieden voor VC++. Deze taal laat toe (in tegenstelling tot VC++) om relatief makkelijk Windows Forms te creëren.
Wat is VBA? VBA staat voor Visual Basic for Applications. Dit omdat deze speciaal is ontworpen om eenvoudig in MS Word, Access of Excel een programma te schrijven. De taal die hiervoor gekozen werd was Visual Basic, maar laat toe om makkelijk de inhoud van dit soort bestanden te wijzigen.
' het reserveren van geheugenruimte wordt gedaan met het type Dim.
' In dit geval reserveren we 4 keer een type string
' en 1 keer een type integer.
Dim lab1 As String
Dim lab2 As String
Dim lab3 As String
Dim lab4 As String
Dim a As Integer
' Dit is de Next Button. We verhogen de teller en maken dan gebruik
' van de specifieke functies van VBA voor excel namelijk Range.
' Dit specificeert welk veld of van welk veld tot welk veld. Hieronder maken
' we de keuze om van de oorspronkelijke rij een offset met a te nemen
' en geen tov de kolom. Deze Value (waarde: string, getal, ..) vullen we in
' in de labels
Private Sub CommandButton1_Click()
a = a + 1
Label1.Caption = Range(lab1).Offset(a, 0).Value
Label2.Caption = Range(lab2).Offset(a, 0).Value
Label3.Caption = Range(lab3).Offset(a, 0).Value
Label4.Caption = Range(lab4).Offset(a, 0).Value
End Sub
' Dit is de Previous Button. We verlagen de teller en maken dan gebruik
' van de specifieke functies van VBA voor excel namelijk Range.
' Dit specificeert welk veld of van welk veld tot welk veld. Hieronder maken
' we de keuze om van de oorspronkelijke rij een offset met a te nemen
' en geen tov de kolom. Deze Value (waarde: string, getal, ..) vullen we in
' in de labels
Private Sub CommandButton2_Click()
a = a - 1
Label1.Caption = Range(lab1).Offset(a, 0).Value
Label2.Caption = Range(lab2).Offset(a, 0).Value
Label3.Caption = Range(lab3).Offset(a, 0).Value
Label4.Caption = Range(lab4).Offset(a, 0).Value
End Sub
' een lege toets
Private Sub CommandButton3_Click()
End Sub
' Deze functie wordt aangeroepen wanneer de form opstart, men kan ook nog
' andere kiezen nl: wanneer er op geklikt word,...
' we stellen de teller in op 0 en geven de velden een beginwaarde.
Private Sub UserForm_Activate()
a = 0
lab1 = "A1"
lab2 = "B1"
lab3 = "C1"
lab4 = "D1"
Label1.Caption = Range(lab1).Value
Label2.Caption = Range(lab2).Value
Label3.Caption = Range(lab3).Value
Label4.Caption = Range(lab4).Value
End Sub
Woordenlijst
bewerkenHet kan handig zijn allerlei codes van Visual Basic te verzamelen. Deze lijst kan namelijk een belangrijke steun zijn bij het programmeren. Hieronder een woordenlijst met codes in Visual Basic. U wordt vriendelijk uitgenodigd codes toe te voegen.
Algemene simpele opdrachten
bewerken- Sub hier titel() : titel van de macro (komt helemaal bovenaan)
- Selection.TypeText Text:="(de tekst)" : op de plaats van de cursor komt de tekst
- ActiveDocument.Paragraphs.Count : regels tellen
- ActiveCell.Value : inhoud actieve cel wordt uitgelezen (Excel)
- ActiveDocument.Save : opslaan
- ActiveDocument.PrintOut Copies:=(getal) : een aantal keer afdrukken
- ActiveDocument.Printout Range:=wdPrintCurrentPage : uitsluitend huidige pagina printen (range betekent afdrukbereik)
- ActiveDocument.Range(0, 20).Select : eerste 20 tekens van open document worden geselecteerd (0, 20 te vervangen door ieder gewenst getal)
- Documents.Save : alle geopende documenten worden opgeslagen
- Documents(1).Save : eerste document in verzameling wordt opgeslagen (1 te vervangen door ieder gewenst getal, zo slaat 2 het tweede document op)
- Documents.Add : nieuw document
- End Sub : einde van de macro
- formuliernaam.Show : formulier wordt getoond
- Range("A1:A5").Formula = "woord" : cellen A1 tot en met A5 worden met een bepaald woord gevuld (Excel, A1:A5 te vervangen door ieder gewenste cel)
- Selection.Copy : selectie wordt in het Microsoft klembord opgeslagen
- Sheets.PrintOut : alle bladen in werkmap worden afgedrukt (Excel)
- Selection.TypeText : tekst in nieuw document plaatsen
- Selection.TypeParagraph : nieuwe alinea wordt begonnen
- Workbooks.Add : nieuwe werkmap (Excel)
VBA constanten
bewerken- vbCrLf : regelterugloop en regelinvoer
- vbCr : regelterugloop
- vbLf : regelinvoer
- vbNewLine : automatisch één van bovenstaande, afhankelijk van het besturingssysteem
- vbTab : Tab-teken
VBA functies
bewerken- LCase(tekenreeks) : tekst omzetten naar kleine letters
- UCase(tekenreeks) : tekst omzetten naar hoofdletters
- Left(tekenreeks, x) : de eerste x tekens aan de linkerkant van de tekenreeks
- Right(tekenreeks, x) : de eerste x tekens aan de rechterkant van de tekenreeks
- Mid(tekenreeks, x, y) : een tekenreeks beginnend bij karakter x ter lengte van y uit de grotere tekenreeks
- variabele = Inputbox(vraag, titel, ...) : invoer vragen aan de gebruiker
- MsgBox(melding, knoppen, titel, ...) : een melding op het scherm tonen
- Len() : lengte van tekenreeks achterhalen
Operatoren
bewerkenAlgemene operatoren
bewerken- = : gelijk aan
- <> : ongelijk aan
- < : kleiner dan
- > : groter dan
- <= : kleiner dan of gelijk aan
- => : groter dan of gelijk aan
Getal operatoren
bewerken- + : optellen
- - : aftrekken
- * : vermenigvuldigen
- / : delen
- ^ : machtsverheffen
- ^0.5 : makkelijke manier om vierkantwortels te trekken
Logische operatoren
bewerken- Not : uitkomst vergelijking omdraaien
- And : twee of meer vergelijkingen in 1 If instructie beoordelen
- Or : beoordelen of 1 van de vergelijkingen waar is
- Xor : is true wanneer 1 van de uitdrukkingen true is, maar niet beide, dan is het false.
Tekst operatoren
bewerken- & of + : om twee strings te te verbinden (! er wordt geen spatie tussen gezet !)
Gegevenstypes
bewerkenElke variabele kan je definiëren aan de hand van Dim 'naamveriabele' as 'gegevenstype' (je kan ook Private ... as ... gebruiken: dit heeft dezelfde betekenis als dim: je kan de variabele enkel in deze module gebruiken of je kan Public ... as ... gebruiken: je kan de variabele in elke module gebruiken); als je ingewikkelde programma's schrijft is het handig om bovenaan je code (voor Sub ()) option explicit toe te voegen, dit betekent dat je alle variabelen moet definiëren en is handig om geen typfouten te maken. Nadat je je variabele dan hebt gedefiniëerd kan je deze gelijkstellen aan een waarde. Hier een tabel met soorten gegevenstypes (deze tabel is niet zeker niet compleet, maar biedt een handige basis).
Gegevenstype | Verklaring |
---|---|
string | bevat tekst, altijd gelijkstellen aan iets tussen dubbele aanhalingstekens |
boolean | bevat een juist of fout-waarde, handig voor logische variabelen, altijd gelijkstellen aan True of False |
integer | bevat een getal tussen 32768 en zijn negatieve equivalent, enkel gehele getallen (dus geen komma's), gebruikt 2 bytes geheugen |
long | bevat een getal tussen 2147483648 en zijn negatieve equivalent, enkel gehele getallen (dus geen komma's), gebruikt 4 bytes geheugen |
byte | bevat een getal tussen 0 en 255, enkel gehele getallen (dus geen komma's), gebruikt logischerwijs 1 byte geheugen |
single | bevat een kommagetal, gebruikt 4 bytes geheugen en kan dus evengrote getallen aan als een long |
double | bevat een kommagetal, gebruikt 8 bytes geheugen en kan dus ongeveer dubbel zoveel cijfers verwerken als een single |
currency | bevat een kommagetal, is SUPERnauwkeurig maar verbruikt SUPERveel geheugen |
variant | bevat ofwel een tekst, ofwel een getal, of meer specifieke andere toestanden (die niet echt voor beginners zijn weggelegd) |
vbMsgBoxResult | bevat de uitkomst van de knoppen van een msgbox, vb. als er op ok is gedrukt kan je schrijven If vbmsgboxresult = vbok then ...) |
Object | bijna alle objecten (zoals info over je computer, geluiden, ...) worden hierin opgeslagen, ook eerder niet voor beginners |
date | hierin kan je info over data opslaan, je kan er ook tijden in opslaan |
Een veelgemaakte fout is dat er een verkeerd gegevenstype wordt gebruikt voor een functie (vb. je stelt een stringvariabele gelijk aan een functie die een getal als uitkomst geeft), voor het juiste gegevenstype te achterhalen kan je in office-applicaties de functie selecteren en dan op F1 drukken voor het help-menu te openen. In dit help-menu staat zo goed als altijd vermeld wat het verwachte gegevenstype is.
Beslissingsinstructies en logische operatoren
bewerkenIf ... Then
bewerkenDe If ... Then instructie bestaat standaard uit drie delen:
het If- deel: hierachter volgt een stelling (zoals variabele < 1, zie onderdeel operatoren voor meer soorten stellingen),
het Then-deel: hierachter komt altijd een nieuwe regel met wat er moet gebeuren als de stelling waar is,
het End If-deel: het End If-deel is nodig om duidelijk te maken dat de If ... Then instructie is afgelopen.
Optionele delen van de If ... Then instructie
bewerkenOptionele delen zijn delen die niet altijd nodig zijn maar wel handig kunnen zijn om te gebruiken.
Het Else-deel: direct hierachter komt wat er moet gebeuren als de stelling niet waar is, als je deze instructie niet hebt wordt er niks gedaan als de stelling niet waar is.
Het ElseIf-deel: direct hierachter volgt een nieuwe stelling, je koppelt dus eigenlijk twee dingen aan elkaar Else + If en na deze nieuwe voorwaarde komt een nieuwe lijn waarop dan weer de code wordt getypt wat er moet gebeuren als die stelling waar is.
voorbeeld If...Then instructie
Sub test()
Dim variabele as string
variabele = inputbox ("geef je tekst in")
If variabele = "Hallo" Or "hallo" then
msgbox "ook hallo"
ElseIf variabele = "Gegroet" then
msgbox "wie zegt dat nu nog?"
Else
msgbox "geen groet?"
end If
End Sub
IIf
bewerkenDe IIf instructie heeft dezelfde betekenis als If ... Then ... Else maar dan op één regel.
Je geeft het als volgt in: IIf(stelling, waar deel, vals deel)
voorbeeld IIf instructie
Sub test ()
Dim variabele as vbmsgboxresult
variabele = msgbox ("klik op een knop", vbokcancel, "knop")
Iif (variabele = vbOk, msgbox "je klikte op OK", msgbox "je klikte op cancel")
End Sub
Select Case ...
bewerkenDe select Case ... instructie bestaat standaard uit minstens 3 delen:
het Select Case-deel: hierachter volgt de naam van de variabele waar je stellingen aan gaat koppelen,
het Case-deel: hierachter schrijf je een waarde (vb. Case 4 wilt zeggen: in het geval dat de variabele 4 is) en dan op een nieuwe regel de code die dan moet gebeuren, je kan zoveel Case-delen in 1 Select Case ... instructie zetten als je wilt,
het End Select-deel: zelfde functie als End If-deel bij de If ... then instructie.
Optionele delen van de Select Case ... instructie
bewerkenhet Case Else-deel: dit schrijf je als laatste case en het is letterlijk in het geval dat het iets anders is dan al vermeld, zelfde functie als het Else-deel bij de If ... Then instructie
voorbeeld van de Select Case ... instructie
Sub test()
dim variabele as string
variabele = inputbox ("geef een getal tussen 1 en 4 in")
select case variabele
case 1
msgbox "één"
Case 2
msgbox "twee"
case 3
msgbox "drie"
case 4
msgbox "vier"
case else
msgbox "foutieve invoer: het getal lag niet tussen de 1 en de 4!", vbcritical + vbokonly
End
End Select
End Sub
Lussen
bewerkenHet eerste deel van een lus staat altijd op voor de lus en het tweede deel erachter en de voorwaarde komt bij de V (de V moet je dus vervangen door een stelling)
- For V ... Next : herhaalt een groep instructies een vast aantal keren
vb. voor V: i = 1 to 10
- For Each V ... Next : herhaalt een groep instructies voor elk element in een verzameling
- Do ... Loop : herhaalt en groep instructies tot een voorwaarde waar is
- Do While V ... Loop : herhaalt instructies zolang voorwaarde aan begin waar is
vb. voor V: i > 10
- Do ... Loop While V : herhaalt instructies zolang voorwaarde aan einde waar is
- Do Until V... Loop : voert instructies uit tot voorwaarde aan begin waar is
- Do ... Loop Until V : voert instructies uit tot voorwaarde aan einde waar is
- For V ... Next ... Step : herhaal een vast aantal malen
- While V ... Wend : herhaal zolang
Methoden
bewerken- .Show : formulier wordt op scherm getoond
- .Hide : formulier wordt onzichtbaar
- AddItem(...) : voegt ... toe, waardoor deze tekst onder het vorige komt te staan
- Clear : maakt het scherm leeg
Instructies
bewerken- Private : variabelen declareren (buiten een macro, enkel voor die module)
- Public : variabelen declareren (voor alle module's, buiten een macro)
- Dim : variabelen declareren (liefst bovenaan in de macro)
- ReDim : éénmaal gedimensioneerd array wijzigen
- ReDim Preserve : bestaand array herdimensioneren zonder inhoud te verliezen
Diversen
bewerken- Step : tellervariabele in grotere stappen laten ophogen
- CInt(...) : zet de inhoud van ... om in integer
- Str(...) : zet ... om in String