If Expressie die Waar of Vals is Then
Doe iets als de expressie Waar is
End If
Const strResultaat As String = "Het resultaat is....."
Sub sAls1()
If MsgBox("Wat kies je ?", vbQuestion + vbOKOnly, "maak keuze") = vbOK Then
MsgBox "u koos OK!", vbInformation, strResultaat
End If
End Sub
If Expressie die Waar of Vals is Then
Doe iets als de expressie Waar is
Else
Doe iets anders indien de Expressie niet waar is
End If
Sub sAls2()
Dim strBoodschap As String
If MsgBox("Wat kies je ?", vbQuestion + vbOKCancel, "maak keuze") = vbOK Then
strBoodschap = "u koos OK!"
Else
strBoodschap = "u koos Cancel"
End If
MsgBox strBoodschap, vbInformation, strResultaat
End Sub
If Eerste Expressie die Waar of Vals is Then
Doe iets als de eerste expressie Waar is en negeer volgende ElseIf
ElseIf Tweede Expressie die Waar of Vals is Then
Doe iets als de tweede expressie waar is en negeer volgende ElseIf
ElseIf Derde Expressie die Waar of Vals is Then
Doe iets als de Derde expressie waar is
End If
Sub sAls3()
Dim intKeuze As Integer
Dim strBoodschap As String
intKeuze = MsgBox("Wat kies je ?", vbQuestion + vbYesNoCancel, "maak keuze")
If intKeuze = vbYes Then
strBoodschap = "u koos Yes!"
ElseIf intKeuze = vbNo Then
strBoodschap = "u koos No"
ElseIf intKeuze = vbCancel Then
strBoodschap = "u koos Cancel"
End If
MsgBox strBoodschap, vbInformation, strResultaat
End Sub
vertoont veel gelijkenis met voorgaande If Then ElseIf Then End If
maar is overzichtelijk en beter als er veel condities moeten getest worden
Select caseCase
voer actie uit indien waar en ga dan naar End Select
Case
voer actie uit indien waar en ga dan naar End Select
Case
voer actie uit indien waar en ga dan naar End Select
........enz
End Select
Sub sSelect()
Dim strBoodschap As String
Dim varGegeven As Variant
varGegeven = InputBox("voer willekeurig getal in", "Select Case voorbeeld")
If IsNumeric(varGegeven) Then
Select Case varGegeven
Case Is < 0
strBoodschap = "Het getal is kleiner dan nul"
Case Is = 0
strBoodschap = "Het getal is gelijk aan nul"
Case Is < 11
strBoodschap = "Het getal is tussen 1 en 10"
Case Is < 101
strBoodschap = "Het getal is tussen 11 en 100"
Case Is < 1001
strBoodschap = "Het getal is tussen 11 en 1000"
Case Is > 1000
strBoodschap = "Het getal is groter dan 1000"
End Select
Else
strBoodschap = "u hebt geen getal ingegeven!"
End If
MsgBox strBoodschap, vbInformation, strResultaat
End Sub
For int = 0 To 1000 (of eender ander geheel getal)
Doe iets, hier wordt een conditie gecontroleerd en herhaal tot aan 1000 (of eender ander geheel getal)
Next int
Men kan zonodig de lus verlaten met een Exit For Statement
Sub sFor1(intTelTot As Integer, intDeelbaarDoor As Integer)
Dim intTel As Integer
Dim intDum As Integer
For intTel = 1 To intTelTot
If intTel Mod intDeelbaarDoor = 0 Then
intDum = intDum + 1
End If
Next intTel
MsgBox " van 1 tot " & intTelTot & " zijn er " & intDum & vbCrLf & " getallen deelbaar door " & intDeelbaarDoor, vbInformation, strResultaat
End Sub
For each
Doe iets
Next
vertoont gelijkenis met voorgaande maar is vooral handig bij objecten en er moet geen limiet getal ingegeven worden
Hier een voorbeeld met formulieren
Sub sFor2()
Dim objAccess As Access.AccessObject
Dim intTel As Integer
For Each objAccess In CurrentProject.AllForms
Debug.Print objAccess.Name
intTel = intTel + 1
Next
MsgBox intTel & " formulieren", vbInformation, strResultaat
End Sub
Do While of Until een bepaalde expressie waar is
Doe iets
Loop
er moet geen limiet getal ingegeven worden en de lus wordt doorlopen
tot de conditie waar is
tussen in kan men bijkomende condities instellen en zonodig de lus verlaten met een Exit Do statement
Sub sDo1()
Dim intIets As Integer
Dim intStap As Integer
intStap = 1000
intIets = 1
Do While intIets > 0
intIets = intIets + 1
If intIets > intStap Then
If MsgBox(" wij zijn aan " & intIets & " Stoppen ?", vbInformation + vbYesNo) = vbNo Then
intStap = intStap + 1000
If intStap > 30000 Then
MsgBox "nu moet je stoppen!", vbCritical + vbOKOnly, strResultaat
Exit Do
End If
Else
intIets = -1
End If
End If
Loop
End Sub
Sub sDo2()
Dim intIets As Integer
Dim intStap As Integer
intStap = 1000
intIets = 1
Do Until intIets > 30000
intIets = intIets + 1
If intIets > intStap Then
If MsgBox(" wij zijn aan " & intIets & " Stoppen ?", vbInformation + vbYesNo) = vbNo Then
intStap = intStap + 1000
If intStap > 29000 Then
MsgBox "nu moet je stoppen, ik verwittig niet meer!", vbCritical + vbOKOnly, strResultaat
intIets = 30001
End If
Else
intIets = 30001
End If
End If
Loop
End Sub
Een variante op Do maar zelfde principe dus
While een voorwaarde is waar
doe iets
Wend
Sub sWhile()
Dim intTel As Integer
While intTel > 30001
intTel = intTel + 1
If intTel = 30000 Then
MsgBox "wij zijn aan " & intTel & vbCrLf & "wij gaan stoppen!", vbCritical, strResultaat
End If
Wend
End Sub
Willekeurige getallen genereren, is een getal even of oneven
In veel programma's moeten op een bepaald ogenblik willekeurige getallen gegeneerd worden. In VB.net brengt men de code daartoe
best onder in een 'class'. Hier worden een aantal class'es besproken, waar gewoon een willekeurig getal tussen twee grenzen
gegeneerd wordt, maar ook waar tussen twee grenzen één zelfde waarde slechts éénmaal mag voorkomen. Ook code waarmee men kan bepalen indien het getal even of
oneven is.
clsWilGet1:Willekeurig getal van Byte-datatype (0 tot 255) tussen twee limieten mag maar éénmaal voorkomen.
'System.Security.Cryptography moet in de class geImporteerd worden.
Imports System.Security.Cryptography
Public Class clsWilGet1
Dim _set As BitArray
Dim _min As Byte
Dim _max As Byte
Dim _tel As Integer
Public Sub New(ByVal min As Byte, ByVal max As Byte)
_min = min
If (min > max) Then
_max = min
Else
_max = max
End If
_set = New BitArray(_max - _min + 1)
_tel = max - min
End Sub
Public Function GeefVolgendGetal() As Integer
Dim randomGetal(0) As Byte
Dim testGetal As Integer
Dim rng As New RNGCryptoServiceProvider()
Do While _tel >= 0
rng.GetBytes(randomGetal)
testGetal = CInt(randomGetal(0))
testGetal = (CInt(testGetal) Mod (_max - _min + 1)) + _min
If Not _set.Item(testGetal - _min) Then
_set.Set(testGetal - _min, True)
_tel -= 1
Return testGetal
End If
Loop
Return -1
End Function
Public Sub Reset()
_tel = _max - _min
_set.SetAll(False)
End Sub
End Class
clsWilGet2:Willekeurig getal van Integer-datatype tussen twee limieten mag maar éénmaal voorkomen.
Public Class clsWilGet2
Private _min, _max As Integer
Private _set() As Integer 'Array of integers
Private _index As Integer
Public Sub New(ByVal min As Integer, ByVal max As Integer)
_min = min
If (min > max) Then
_max = min
Else
_max = max
End If
'vorm de reeks
_set = InitReeks()
End Sub
Private Function InitReeks() As Integer()
Dim random As New Random()
Dim getallen(_max - _min) As Integer
Dim waarde As Integer = _min
Dim tmp As Integer
Dim index1 As Integer
Dim index2 As Integer
'vul de rees met de getallen
For x As Integer = 0 To getallen.Length - 1
getallen(x) = waarde
waarde += 1
Next
'haal door elkaar 1000 iteraties moeten voldoende zijn
For x As Integer = 0 To 1000
'neem twee willekeurige indexen
index1 = random.Next(0, getallen.Length)
index2 = random.Next(0, getallen.Length)
'haal door elkaar
tmp = getallen(index1)
getallen(index1) = getallen(index2)
getallen(index2) = tmp
Next
Return getallen
End Function
Public Function GetNext() As Integer
Dim result As Integer
If (_index < _set.Length) Then
result = _set(_index)
_index += 1
Else
result = -1
End If
Return result
End Function
End Class
clsWilGet3:Willekeurig getal van Integer-datatype tussen twee limieten mag maar éénmaal voorkomen.
Public Class clsWilGet3
Private rand As Random
Private pool As List(Of Integer)
Sub New(ByVal min As Integer, ByVal max As Integer)
rand = New Random
pool = New List(Of Integer)(max - min)
For i As Integer = min To max
pool.Add(i)
Next
End Sub
Public Function GeefItem() As Integer
If pool.Count = 0 Then Return -1
' geef willekeurige index van de pool List.
Dim index As Integer = rand.Next(0, pool.Count)
' geef weer.
Dim draw As Integer = pool(index)
' verwijder van de pool List.
pool.RemoveAt(index)
Return draw
End Function
End Class
clsWilGetal1, clsWilGetal2, clsWilGetal3 weergeven in een console-toepassing.
Sub Main()
Dim raad1 As New clsWilGet1(1, 100)
Dim raad2 As New clsWilGet2(1, 100)
Dim raad3 As New clsWilGet3(1, 100)
For intTel As Integer = 0 To 20
Console.Write(raad1.GeefVolgendGetal & " - " & raad2.GetNext & " - " & raad3.GeefItem & vbCrLf)
Next
Console.ReadLine()
End Sub
Willekeurig getal tussen twee limieten
''' Generen van een willekeurig getal tussen 0 en 7, men kan de limieten wijzigen
Public Class clsWilGetal
Private Shared _intWilGetal As Integer
Public Shared ReadOnly Property Genereer() As Integer
Get
Dim intBoven As Integer = 6
Randomize()
_intWilGetal = CInt(Int((intBoven * Rnd()) + 1))
Return _intWilGetal
End Get
End Property
End Class
Is een getal Even of Oneven?
Sub OnOfEven()
Dim intTeller As Integer = 1
Dim strEven As String = "even"
Dim strOneven As String = "oneven"
Dim strResul As String = ""
Do While intTeller < 100 'hier tot 100 maar kan meer zijn
If intTeller Mod 2 = 0 Then 'getal is even
strResul = strEven
Else
strResul = strOneven
End If
Console.WriteLine(intTeller & "is " & strResul)
intTeller = intTeller + 1
Loop
End Sub
Priemgetallen weergeven tot opgegeven bovengrens
Public Function Priem(ByVal intMaxGrens As Integer) As String
Dim i As Integer
Dim j As Integer
Dim bflag As Boolean
Dim strResul As String = ""
For i = 1 To intMaxGrens
bflag = True
For j = 2 To i / 2
If i Mod j = 0 Then
bflag = False
End If
Next
If bflag Then
strResul += i.ToString & " "
End If
Next
Return Trim(strResul)
End Function
Wie VBA onder de knie heeft ondervindt in eerste instantie niet te veel problemen om naar VB.net over te stappen.
Na enige initiatie en gewenning stelt men echter vast dat de mogelijkheden extreem ruimer zijn.
Bovendien stelt Microsoft gratis een 'Expression' - versie van Visual studio ter beschikking.
Het betreft hier werkelijk een bijzondere krachtige ontwikkelings omgeving, in het Engels IDE of
Integrated Development Environment. Deze Blog heeft niet de pretentie om deze toepassing, ik werk met zowel de versie 2010 als 2012
, volledig uit de doeken te doen. Wel kan ik iedereen die graag programma's maakt, al zij het in de hobbysfeer zoals bij mezelf,
deze ontwikkelingsomgeving warm aanbevelen.
Waar te bekomen ?
Via volgende link kan men gratis Visual Studio Express 2012 for Windows Desktop downloaden.
Volg de instructies en na het dowloaden en de installatie rest u nog enkel de applicatie gratis te registreren op
de website van Microsoft.
Hoe onder de knie krijgen ?
Ik zelf heb mijn toevlucht gezocht bij enkele boeken over VB.net, aanraders zijn :
De volgende Website is ook zeker een aanrader : VB Voorbeelden
Deze Blog.
Op deze blog wil ik graag ervaringen delen. Van practische problemen waarop ik gezocht heb geef ik hier graag
mijn oplossing. De laatste tijd leg ik mij toe op het ontwikkelen van eenvoudige spelletjes zoals, 'Pietjesbak', 'Vier
op een rij', 'Zeeslag'. Eens deze volledig op punt staan zal ik deze op deze blog ter beschikking stellen.
VBA code wordt uitgevoerd in Sub
of Function Procedures. Terwijl beide voorgaanden
ingekapseld zitten in een Module of een Class-Module.
Sub : Bij een Sub wordt een actie uitgevoerd
maar wordt er niets geretourneerd. Bijvoorbeeld een formulier openen, een
bericht laten zien aan de gebruiker via de MsgBox funtie. Een Sub kan al dan
niet argumenten nemen, en kan Public of Private zijn
Function : Bij een kan er ook een actie
uitgevoerd worden maar er wordt een waarde (zie Datatypes) geretourneerd.
VBA is een objectgeoriënteerde
programmeer taal. Men kan een volledige datastructuur met datatypes en
bewerkingen definiëren. Men kan ook met andere objecten werken voor zover er in
VBA een referentie naar gelegd wordt. Deze worden gevisualiseerd in de object
browser.
VBA is beschikbaar in alle Microsoft Office programma's, en ieder programma
beschikt over een code Editor die kan geopend worden door Alt+F11 te drukken.
Ieder object kan beschikken over meerdere
eigenschappen (properties), bepaalde kunnen gewijzigd worden, andere
kunnen enkel gelezen worden. Evenzo beschikt ieder object in Access over
eigenschappen, voorbeeld het formulier-object heeft een caption (opschrift),
breedte, hoogte, achtergrondkleur enz , eigenschap.
Op objecten kunnen ook methodes
(methods) toegepast worden, welke een actie met het object tot stand
brengen. Zo heeft het DoCmd-object van Access de Beep, OpenForm...enz methode.
Een Event of gebeurtenis doet
zich voor wanneer een actie met het object plaatsgrijpt,bijvoorbeeld een
formulier die opent.
Een programma maakt ook gebruik van
variabelen. Voor een variabele wordt in het geheugen een plaats
gereserveerd waar een waarde kan gestockeerd worden. Dit doet men aan de hand
van het de Dim verklaring. Door een geschikte naam
te geven wordt de code leesbaarder. Aan variabelen kunnen verschillende
datatypes toegekend worden. Men kan de efficiënte
van de code in de handwerken door de juiste datatypes te hanteren. Het is ten
zeerste aangeraden variabelen te declaren en de het juiste datatype toe te
wijzen, wijst men geen dattype toe dan kent VBA automatisch het datatype variant
toe. Het variant datatype reserveert van alle andere datatype het meeste
geheugen, en laat de code daardoor minder performant werken.
Door bovenaan een module 'Option Explicit' te vermelden legt men zichzelf de
discipline de variabelen uitdrukkelijk te declaren