Visual Basic for Applications
Visual Basic for Applications (VBA) is een programmeertaal die bestemd is om applicatieprogramma's te automatiseren of uit te breiden. Voornamelijk bekend uit de Microsoft Office serie, zoals Word, Excel en Access, maar ook gebruikt in applicaties van derden, zoals AutoCAD. De syntaxis van VBA is ontleend aan Visual Basic. Hieraan zijn een aantal opdrachten voor communicatie met de moederapplicatie toegevoegd.
Met behulp van VBA is het mogelijk toepassingen te automatiseren en de functionaliteit van de applicatie kan daardoor enigszins worden uitgebreid. VBA wordt dan gebruikt als een macrotaal voor die applicatie, waarin extra functies voor die applicatie kunnen worden geprogrammeerd. De basisfunctionaliteit van het applicatieprogramma kan in een VBA programma worden aangeroepen. Een programmeur zou hiermee bijvoorbeeld een compleet systeem voor een ledenadministratie kunnen maken op basis van het bestandsbeheerprogramma Access, in combinatie met specifieke zelf-geprogrammeerde functies in VBA.
VBA vervangt macrotalen, zoals WordBasic, dat in de oudere versies van Microsoft Word werd gebruikt. VBA is evenals Visual Basic een quasi objectgeoriënteerde programmeertaal. Met VBA kan men echter geen onafhankelijk programma schrijven, zoals met Visual Basic; bij VBA heeft men steeds de moederapplicatie nodig.
Het sterke punt van VBA is de eenvoudige integratie met het OLE-automation model, hierdoor is het mogelijk op eenvoudige wijze meerdere applicaties aan elkaar te knopen. Hieruit worden vaak taken die normaal handmatig uitgevoerd worden, bijvoorbeeld zoals het opzoeken en overtypen van adressen, op een eenvoudige manier geautomatiseerd. Het zwakke punt van VBA is het gebrek aan kracht in de taal, en de vaak zeer gebrekkige set "objecten" die applicaties en VBA zelf aanleveren. Dit is echter enorm afhankelijk van de applicatie waarin VBA draait: zo biedt VBA in Excel & Access veel meer mogelijkheden om in interactie te treden met de geopende spreadsheet of database dan pakweg VBA in Powerpoint
Een nadeel van de toepassing van VBA is dat daarmee virussen en andere malware in een bestand terecht kunnen komen. Veel systeembeheerders beperken of verbieden daarom het gebruik van VBA.
Er bestaan verschillende varianten van VBA, die ieder voor een bepaalde applicatie zijn bedoeld. Tussen deze varianten kunnen kleine verschillen bestaan. Het versienummer van een VBA is niet gelijk aan het versienummer van de overeenkomstige versie van Visual Basic, maar geeft de versie weer van de applicatie waarvoor de VBA versie gemaakt werd.
VBA is inmiddels beschikbaar voor bijna alle Microsoft Office applicaties zoals Word, Excel, Access, Outlook, PowerPoint. Sub OneindigeLus
Dim intGetal As integer intGetal = 10 Do While intGetal <= 10 intGetal = intGetal - 1 Loop 'While intGetal <= 10
End Sub 'OneindigeLus
' Schrijf een Sub ToonTicketVanBoeken die van een aantal boeken '- het aantal inleest, '- de prijs inleest. 'Als je 0 als aantal inleest, stop je met inlezen. 'Je toont op het scherm '“x X bb.bb euro = cc.cc euro 'y X dd.dd euro = ee.ee euro '-------------- 'totaal: ff.ff euro†Sub ToonTicketVanBoeken
Const cintAantalOmTeStoppen As integer = 0 Dim intAantal As integer Dim sngPrijs As Single Dim sngTotaalPrijsPerBoek As Single Dim sngTotaalPrijsAlleBoeken As Single Dim strLijn As String Dim strTekst As String Dim loCRLF As String 'init strTekst = "" loCRLF = chr(13) & chr(10) sngTotaalPrijsAlleBoeken = 0 'lees en verwerk intAantal = cint(val(inputbox("Geef aantal Boeken"))) Do While intAantal <> cintAantalOmTeStoppen sngPrijs = csng(val(inputbox("Geef prijs per boek"))) sngTotaalPrijsPerBoek = intAantal * sngPrijs sngTotaalPrijsAlleBoeken = sngTotaalPrijsAlleBoeken + sngTotaalPrijsPerBoek
'x X bb.bb euro = cc.cc euro strLijn = Format(intAantal, "0") & " x " & Format(sngPrijs, "0.00") & " euro = " & Format(sngTotaalPrijsPerBoek, "0.00") & " euro" & loCRLF strTekst = strTekst & strLijn
intAantal = cint(val(inputbox("Geef aantal Boeken"))) Loop 'While intAantal <> cintAantalOmTeStoppen strTekst = strTekst & "-------------------------" & loCRLF strTekst = strTekst & "Totaal: " & Format(sngTotaalPrijsAlleBoeken, "0.00") & " euro" 'toon msgbox strTekst
End Sub 'ToonTicketVanBoeken
'111 Schrijf een ToonGrootste 'die gehele getallen inleest tot je een negatief getal inleest. 'Op het einde toon je in 1 msgbox alle ingelezen getallen en het grootste. 'Tip: veronderstel dat je begint met -32768 als grootste getal. Sub ToonGrootste
Const cintAllerKleinsteGetal As integer = -32768 Dim intGetal As integer Dim intGrootste As integer Dim strTekst As String Dim loCRLF As String
'init
strTekst = "" loCRLF = chr(13) & chr(10) intGrootste = cintAllerKleinsteGetal
'lees en verwerk
intGetal = cint(val(inputbox("Geef getal (negatief getal om te stoppen)"))) Do While 0 <= intGetal If intGrootste < intGetal Then intGrootste = intGetal End If 'intGrootste < intGetal strTekst = strTekst & Format(intGetal, "0") & " " intGetal = cint(val(inputbox("Geef getal (negatief getal om te stoppen)"))) Loop 'While 0 <= intGetal 'intGetal < 0 strTekst = strTekst & loCRLF & Format(intGrootste, "0")
'toon
msgbox strTekst
End Sub 'ToonGrootste