Programmeren in VB&VBA

Uit Wikibooks

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[bewerken]

Het 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[bewerken]

Algemene 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[bewerken]

Elke 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[bewerken]

If ... Then[bewerken]

De 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[bewerken]

Optionele 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[bewerken]

De 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 ...[bewerken]

De 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[bewerken]

het 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[bewerken]

Het 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
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.