Constanten, variabelen en arrays



Dovnload 188.34 Kb.
Datum17.08.2016
Grootte188.34 Kb.
Constanten, variabelen en arrays

Option Explicit

Option explicit verplicht variabelen te definiëren. In te stellen met Extra|Opties.


Functies voor te zien welk datatype in variabele


Dim y as Integer

Dim y as Boolean

Y = 10

X = IsArray(Y)



If X is true Then

Msgbox(“Y is een array”)

Else

Msgbox(“test andere functies uit”)




Functie

Getest datatype

IsArray

True voor arrays

IsDate

True voor Date

IsEmpty

True voor niet-geïnitialiseerde variabele

IsError

True voor foutwaarde

IsMissing

True voor niet-doorgegeven parameter

IsNull

True voor een lege variabele

IsNumeric

True voor een getalswaarde

IsObject

True voor een object




Functie met TypeName(v) geeft tekenreeks

Sub TestType(v As Variant)

MsgBox TypeName(v)

End sub


Functie met Vartype(v) retourneert een getal

Sub TestType( v As Variant)

Msgbox Vartype(v)

End Sub


Waarden die VarType kan retourneren zijn :


Waarde

Symbolische constante

0

vbEmpty

1

vbNull

2

vbInteger

3

vbLong

4

vbSingle

5

vbDouble

6

vbCurrency

7

vbDate

8

vbString

9

vbObject

10

vbError

11

vbBoolean

12

vbVariant

13

vbDataObject

14

vbDecimal

17

vbByte

8192

vbArray





Voorbeeld woorden tellen


Option Explicit

Const ERIN As Integer = 1

Const ERUIT As Integer = 0
Function WoordenTellen (text As Variant)

Dim regel As string, teken As String, teller As Integer, i As Integer, status As Integer

Regel = Trim(text)

Status = ERUIT

Teller = 0

‘voor elke letter wordt getest of letter aan het begin van een woord, een letter binnen een woord is of een teken is dat zich niet in een woord bevindt

For i = 1 to Len(regel)

teken = Mid(regel, i, 1)

‘test of het om een letter gaat

If teken Like “[A-ZA-z]” Then

‘Is teken begin nieuw woord

If status = ERUIT Then

Status = ERIN

Teller = teller + 1

End If

Else


‘pad als teken geen letter is

If status = ERIN Then

Status = ERUIT

End If


Enf If

Next
Woordentellen = teller

End Function


Arrays

Is opslagstructuur om variabelen van hetzelfde type op te nemen. Werkt met een positieteller Index. Een array kan 1 of meerdere kolommen hebben. Dim a(12,1900 To 2000)

Je kan in een array een boven- en ondergrens opgeven Dim Jaar(1900 To 2000).

Als je niets opgeeft, dan begint de array a(10) met 0. De array a(10) heeft 10 elementen. U kan ook het type opgeven. Doet u dit niet, dan is het type ee Variant. Weet u niet van tevoren hoeveel elementen u nodig hebt, dan maakt u een dynamische array a(). U geeft dus geen Index op. Daarna moet u wel om een foutmelding te voorkomen, direct de array redimmen. Probleem is wel dat alle info dan verloren gaan. Met de instructie Preserve kan u de aanwezige waarden veiligstellen.


Voorbeeld 1 Dynamische array


Sub TestDynamischeArrays()

Dim a(), i

ReDim a(5) 'Eerste grootte-instelling
For i = 0 To 5

a(i) = "regel " & CStr(i)

Next

ReDim Preserve a(10) 'Vergroting, waarden blijven behouden


For i = 0 To 10

Debug.Print a(i)

Next

End Sub



Voorbeeld 2

Option Base 0

Const BLOCK As Integer = 10

Dim waarden() As Variant
Sub Inlezen (a As Range)

Dim i As Integer, Grootte As Integer, z As Variant

i = 0: grootte = 0

For Each z In a.Cells

If (I Mod BLOCK) = 0 Then

grootte = grootte + BLOCK

ReDim Preserve waarden (grootte)

End If


i=i+1

waarden(i) = Trim(z.Value)

Next

Waarden(0) = i



End Sub
Sub Uitvoeren ()

Dim i As Integer

For i = 1 To waarden(0)

Debug.Print i, waarden(i)

Next

End Sub
Sub Hoofdprocedure()



Inlezen Application.Range(“A1”,”C16”)

Uitvoeren

End Sub



Voorbeeld 3 : 10 regels typen met 10 sterrekes


Sub PatroonGenereren()

Dim regel(10), i

'Elke regel krijgt het patroon ******

For i = 0 To 10

regel(i) = String(5, "*")

Next


For i = 0 To 10

Debug.Print i, regel(i)

Next

End Sub



Voorbeeld 4 : LBound(), UBound() om onder- en oppergrens van array te bepalen

Option Base 0

Dim a(10) As Variant

Dim b(-5 To 5) As Variant

Sub Ondergrenzen()

Dim onder As Integer

Onder = LBound(a) ‘resultaat is 1 voor Base 1

Debug. Print onder

onder = LBound(b) ‘resultaat -5

Debug.Print onder

End Sub
Option Base 0

Dim a(10) As Variant

Dim b(-( To 5) As Variant

Sub Bovengrenzen()

Dim boven As Integer

Boven =UBOund(a) ‘Resultaat 10

Debug.Print boven

Boven=UBound(b) ‘Resultaat 5

Debug.Print boven

End Sub



Voorbeeld 5 van een variabel een array maken met de array-functie


Option Base 0

Sub ArrayFunctie()

Dim a As Variant

A=Array(“a”, “b”, “c”)

‘Resultaat 0 en 2 voor Base 0

‘en 1 en 3 voor Base 1

Debug.Print LBound(a), Ubound(a)

‘Resultaat a en c

Debug.Print a(LBound(a)), a(Ubound(a))

End Sub




Een array verwijderen

Met de opdracht Erase ArrayNaam verwijdert u de dynamische array. De statische array verliest met erasde enkel haar inhoud. Meer arrays te verwijderen ? Zet achter de opdracht Erase de verschillende arrays.





Beheerstructuren en foutafhandeling

If vwde Then



ElseIf vwd Then



Else



End If



Sub IfTest()

Dim antw, button

button = vbYesNoCancel

antw = MsgBox("Maak uw keuze alstublieft", button)

If antw = vbYes Then

MsgBox " is ingedrukt"

ElseIf antw = vbNo Then

MsgBox " is ingedrukt"

ElseIf antw = vbCancel Then

End If


End Sub



Select Case variab

Case 10 (als variabele 10 is)

.



Case 1

.



Case Else



End Select




Sub SelectCaseTest()

Dim invoer

Invoer = inputBox (“Voer een getal in tussen 1 en 10!”)

Select Case invoer

Case 10

MsgBox “U hebt 10 ingevoerd”



Case 1

MsgBox “U hebt 1 ingevoerd”

Case Is >= 1 And (invoer<=10)

MsgBox “Invoer tussen 1 en 10”

Case Else

MsgBox “ongeldige invoer”

End Select

End Sub



Switch( variabele =1,”William”, variabele=2,”Karel”)

Sub SwitchTest()

Dim i as Integer

Dim naam as Integer

i = CInt(InputBox("Voer een getal van 1-3 in"))


naam = Switch(i = 1, "William", i = 2, "Hendrik", i = 3, "Karel")
MsgBox naam
End Sub


Choose(i, “William”, “Hendrik”)

Sub ChooseTest()

Dim I as Integer

Dim naam As Integer

I = CInt(InputBox("voer een getal van 1-3 in"))


naam = Choose(I, "William", "Hendrik", "Karel")

MsgBox naam

End Sub

Lussen







Voorwaardelijke lussen





Do While vwde

Do

Instructies

Instructies

Loop

Loop While vwde







Do until vwde

Do

Instructies

Instructies

Loop

Loop Until vwde

Vb van bovenaf gestuurde lus

Vb onderaf gestuurde lus

Sub BovenOnder()

Dim i


i=0

Do Until i=5

Debug.Print i

i=i+1


Loop


Sub OnderBoven()

i=0


Do

Debug.Print i

i= i + 1

Loop Until i = 5

End Sub




Tellussen





Sub NextTest()

Dim i, j, k

For i= 1 tot 5 ‘ mogelijks ook step bij te definiëren step 1, step -1

For j = 1 tot 5

For k = 1 to 5

Debug.Print i, j, k

Next k

Next j


Next i

End Sub


Objectlussen : voor iederen objectvariabele in objectengroep





Sub ObjectenLus()

Dim o As Object

‘De lijst van geopende rekenbladen wordt doorgekeken

For Each o in Worksheets ‘objectvariabele In Objectengroep

Debug.Print Chr(13) & o.Name & Chr(13)

Next


End Sub










Sprongcommando’s








Om oude programma’s te gebruiken in VBA

Absolute sprongen





Sub GotoChaos()

Dim i, erg

i=0

Doel1:


erg=i*i

If erg> 10 goto Doel2

Doel4:

I=i+1


If i>10 Goto Doel3

Goto Doel1

Doel2:

MsgBox “Het tussenresultaat is bereikt”



Goto Doel4

Doel3:


MsgBox”Klaar”

End Sub



Nadeel

: programma’s onoverzichtelijk. Als geen zin om te denken, kan je gebruiken, maar maakt programma onoverzichtelijk. Dus te gebruiken bij tijdsdruk of wanneer bug in programma onmiddellijk te verhelpen :

Do Lus1


Do Lus 2

Do Lus 3


If Rampspoed Then Goto Eruit ‘wel best commentaar erbij schrijven

Loop


Loop

Loop


Eruit


In combinatie met If

If vwde Then Goto SprongDoel

Instructie

SprongDoel :

Instructie










Verborgen sprongen





Lussen afbreken


Exit Do: verlaat do Loop-lussen

Exit For : verlaat Do Loop-lussen


For While : Goto te gebruiken

While


Instructie

If voorwaarde Goto LUSEINDE

Instructie

Wend


LUSEINDE:


Routines afbreken


Sub Procedure()

If voorwaarde Goto Exit Sub

…..

End sub




Programma’s beëindigen of onderbreken


End : beëindigt een programma, sluit geopende bestanden af en zet alle variabelen terug

Stop : onderbreekt een macro, zodat u hem in het testgebied van de ontwikkelomgeving kunt onderzoeken. Daarna kunt u de macro verder laten uitvoeren.









Foutafhandeling




Fouttypen





Gebruikers :

Systeemfouten : wanneer bestand geopend, als printer benaderd



On Error





Fouten opvangen met On error Goto XXX, On error resume Next

Sub schema()

….

On error Resume Next : fouten niet behandelen of….



On error Goto FOUTAFHANDELING ‘waakhond voor kritieke plaats !

KritiekeInstructie

On Error Goto 0 ‘uitschakelen on-error

….

Exit Sub ‘ als niet hier, dan foutafhandeling uitgevoerd ook als alles ok



FOUTAFHANDELING :

Instructies

End sub





Fouten afhandelen met Resume 0, Resume Next, Resume XXX

Sub Schema

……

NOGMAALS :



On error Goto FOUTAFHANDELING

KritiekeInstructie

OnError Goto 0

.

Exit Sub ‘ als niet hier, dan foutafh ook als alles ok

FOUTAFHANDELING:

Instructies

Resume 0 ‘programma probeert foutieve instructie opnieuw uit te voeren

Resume Next ‘beginnen met instructie na fout

Resume NOGMAALS ‘programma voortzetten bij sprongdoel

End Sub





Foutobject

Err.Raise : runtimefouten oplossen. Ook vrije nummers (747-31000)

Err.Clear : resetten Er-object

Err.Number : nummer fout

Err.Source :bron fout

Err.Description : omschrijving

Err.HelpFile : locatie helpbestand

Err.HelpContext : thema binnen helpbezstand

Err.LastDLLErro : laatste foutnummer DLL






Voorbeeld weergave foutmelding met Error() en Er-eigenschap

Sub Foutmelding()

On error Goto FOUTAFHANDELING



….

Exit Sub


FOUTAFHANDELING:

msg1=Error(Err) ‘met functie Error() fout laten weergeven

msg2=Err.Description ‘of met Description-eigenschap van Err.-object

MSgBox msg1,msgé



Voorbeelden









Deling door nul opvangen met On Error

Sub DivByZero()

Dim invoer, resultaat

Invoer = Inputbox(“Voer een waarde in (0 is niet toegestaan)”)

On Error Goto DIVZEROERR

Resultaat = 1/invoer

On Error Goto 0

MsgBox”1/”&invoer & “=” & resultaat

Exit Sub

DIVZEROERR:

MsgBox “Fout: deling door O!”

End Sub



Bestanden openen met On Error, want fout niet op voorhand op te vangen


Sub BestandVeiligOpenen()

Dim regel, besandnaam

bestandnaam = "C:\AUTOEXEC.BAT"

On Error GoTo FILEOPENERR

Open bestandnaam For Input As #1 ‘ deze kritische regel omgeven door foutafhandeling

On Error GoTo 0

'het bestand wordt regel voor regel gelezen en uitgevoerd

Do While Not EOF(1) 'Zolang het bestand nog iets bevat

Input #1, regel 'lezen

Debug.Print regel 'uitvoeren

Loop

Close #1 'Voor de goede orde sluiten het bestand ook weer



Exit Sub

FILEOPENERR:

MsgBox "Bestand " & bestandnaam & "kan niet geopend worden" & Chr(13) & "Foutmelding : " & Error(Err)

End Sub





Procedures en functies

Procedures








Proceduredefinitie


Sub KopiërenGegevens (Parameters)

End Sub





Procedureaanroep


Call ProcedureNaam (Parameter1, Parameter2)

Functies








Functiedefinitie


Function Naam (Parameters) As String

End Function





De retourwaarde

Function Testfunctie()

….

Testfunctie = waarde



End Function



Meerdere retourwaardes


Function TestFunctie()

….

If Testexpressie1 = True Then TestFunctie = Waarde1



ElseIf Testexpressie2 = True Then TestFunctie = Waarde2

Else TestFunctie = Waarde3

….

End function



Retourwaarde in een hulpvariabele


Function TestFunctie()

Dim hv As Variant

….

If Testexpressie1 = True Then hv = Waarde1



ElseIf Testexpressie2 = True The hv = Waarde2

Else hv = Waarde3

….

Testfunctie = hv



End funtion


De functie aanroepen als niet geïnteresseerd in de retourwaarde : als een procedure


Function TestFunctie ()

….

End Function


Sub HoofdMacro

TestFunctie

Call TestFunctie()

End Sub




De functie aanroepen als geïnteresseerd in de retourwaarde : met een expressie


Function TestFunctie ()

End Function


Sub HoofdMacro

Erg = Testfunctie() ‘ aanroep vanuit toewijzing



VerwerkingsFunctie TestFunctie() ‘aanroep met verderverwerking

End sub








Recursieve Programmering





Wanneer een functie of procedure zichzelf opnieuw aanroept spreken we van recursieve programmering. Veel gebruikt bij bewerking van boomstructuren.



Definitie recursieve procedure : bevatten een afbreekcriterium , een broodtekst én een recursieve aanroep


Sub Recursie (w As Variant)

If w = 0 Then Exit Sub ‘ afbreekcriterium

‘ Broodtekst functionele code : voert een functie uit voor het aangeroepen niveau

‘….


Recursie w -1 ‘recursieve aanroep

End sub




Faculteit-berekening recursief geprogrammeerd


Function Fac(w As Integer) As Long

If w > 1 Then

Fac = w* Fac(w-1)

Else


Fac = 1

End Function












De parameterlijsten










Eenvoudige parameterlijsten





Function TestFunctie(par1 As String , par2 As Integer, par 3 As Double)

…’U hoeft niet het type op te geven. Standaard wordt het variant-type gebruikt.

End Function
‘Aanroepen functie

Erg =TestFunction (“Hallo Wereld”, 4711, 0.815)







Call by reference : als opgegeven waarden mogen wijzigen. Eignenlijk

Is het niet nodig dat u deze opgeeft : is standaard van VBA.

Sub Wisselen (ByRef a As Variant, ByRef b As Variant)

Dim c As Variant

c=b

b=a


a=c

End sub







Call by value : de opgegeven waarden mogen niet wijzigen.

Function TestFunctie (ByVal par1 As String, ByVal par2 As Integer, ByVal par 3 As Double)

End Function








Wijzigingen in de parametervariabelen zijn lokaal. Geen invloed op de doorgegeven waarden

Sub TestProcedure (a As Integer)

A = 99

End Sub
Sub Hoofdfunctie()



Dim waarde As Integer

Waarde = 100

Debug.Print waarde

RestProcedure waarde

Debug.Print waarde

End Sub


Optionele parameters : gebruiker geeft enkel waardes aan die moeten wijzigen





Sub TestProcedure (a As Integer, Optional b As Integer, Optional c As Integer = 99)

Debug.Print a,b,c

End Sub
Sub HoofdFunctie()

TestProcedure

TestProcedure 1,,2

TestProcedure 1, 2, 3

End Sub




Parameterarrays: als u niet weet hoeveel parameters u gaat opgeven





Sub TestProcedure(par1 As String, ParamArray par2() As Variant)

Dim val As Variant

Debug.Print Ubound(par2)

For Each val In par2

Debug.Print val

Next


End Sub
Sub Main()

TestProcedure “Hallo Wereld”

TestProcedure “Hallo Wereld”, “HEY”

TestProcedure “Hallo Wereld”, “HEY”, 1, 3.414

TestProcedure “Hallo Wereld”, 1, 2, 3, “HEY”

End Sub








Variabelen in procedures en functies







Globale variabelen en lokale variabelen





Alleen zichtbaar binnen procedure. Globale binnen verschillende procedures van toepassing. Makkelijker te gebruiken dan parametervariabelen, maar kan leiden tot fouten : onderstaand programma is een eindeloos programma geworden door gebruik van globale variabelen.


Dim i As Integer

Sub ProcedureA()

For I = 0 to 5

ProcedureB

Next

Msgbox “Klaar”



End Sub
Sub ProcedureB

For I = 0 to 3

Debug.Print i

Next


End Sub



Bereikbaar binen module

Private Variabelenaam (As Typenaam)


Bereikbaar vanuit elke module van project

Public Variabelenaam (As Typenaam)



De levensduur van variabelen


Vluchtige variabelen

Function AllesVergaat (w As Integer)

Dim oud As Integer

oud = oud + w

AllesVergaat = oud

End Function


Niet-vluchtige variabelen : Static

Function HetGoedeBlijft(w As Integer)

Static oud As Integer

oud = oud + w

HetGoedeBlijft = oud

End function


Alle variabelen statisch : Static plaatsen aan begin procedure

Static Function AllesBlijft(w As Integer)

Dim oud As Integer

oud = oud + w

AllesBlijft = oud

End function






Het gebruik van modules




Moduledefinitie


Verzameling programma’s. Hieruit vanuit documenten programma’s aan te roepen. Aanmaak van een module is via Invoegen/Module en in eigenschappen is de naam van de module in te voeren.

Om een module als zelfstandige eenheid op te slaan, kiest u voor Bestand/exporteren naar een BAS-bestand. Dit is dan opnieuw naar een ander project te importeren.






Modulestructuur


Voorstel opdeling project in modules :

-globaal : alle globale variabelen en constanten : in meer dan 1 module gebruikt

-hulpfuncties : functies en procedures die ondersteunende taken verrichten

-evaluatiefuncties : logisch samenhangende projgrammaobjecten. Maak onderscheid tussen extern geörienteerde objecten (Public te definiëren) en intern geörienteerde objecten. Begin met de contante, datatypen en de variabelen te definieren. Dan de functies en procedures.

-main : centrale punt van waaruit andere functies/procedures aangeroepen

Zichtbaarheden

Public : variabelen, functies en procedures zichtbaar in hele project

Private : variabelen, functies en procedures zijn alleen zichtbaar binnen lokale module

Voorgedefinieerde functies en procedures




Het objectenoverzicht


geeft verschillende voorgedefinieerde functies en procedures. Ga naar Beeld, Objectenoverzicht en kies dan in voor de optie . De volledige lijst van functies verschijnt dan onder . Functies kun je in per thema sorteren vb. Conversien, DataTime, fileSystem, Financial, information, Interaction, Math, Strings)

Interessante functies


Interessante functie : Format()

Converteert numerieke expressies naar de meest uiteenlopende tekenreeksen.

Met stuurtekens aangegeven hoe functie te interpreteren.

Format(datevar, “yyyy”) : jaar uit een datum halen

Format(Now(), “hh:mm:ss”) : actuele tijd bepalen

If (Cint(format(datum, “q”)) Mod 4)= 0 then… : afhandeling schrikkeljaren

MyStr = Format(5, "0,00%") ' Geeft "500,00%".

MyStr = Format("HALLO", "<") ' Geeft "hallo".



MyStr = Format("Dat was het", ">") ' Geeft "DAT WAS HET".

0

Numerieke weergave, alternatief voor weergave van “0”

#

Numerieke weergave, alternatief voor geen weergave

.

Decimaal scheidingsteken

,

Scheidingsteken duizendtallen

E+E-

Exponentnotatie

e+e-




\

Heft speciale betekenis van het volgende teken op

/

Scheidingsteken binnen datums

d

Dag als getal

dd

Dag als getal, met voorloopnul

ddd

Afgekorte weekdag

dddd

Voluit geschreven weekdag

ddddd

Datumformaat : dd-mm-jj

dddddd

Datum in lang formaat

w

Weekdag al getal

ww

Weeknummer

m

Maand als getal

mm

Maand als getal met voorloopnul

mmm

Afgekorte maand

mmmm

Voluit geschreven maand

q

Kwartaal

yy

Jaartal in korte vorm

yyyy

Jaartal in lange vorm

:

Tijdscheidingstekens

h

Uur

hh

Uur met voorloopnul

m

Minuut

mm

Minuut met voorloopnul

s

Seconde

ss

Seconde met voorloopnul

tttt

Volledige tijdsaanduiding

@

Plaatshouder voor een teken, alternatief een spatie

&

Plaatshouder voor een teken, alternatief geen uitvoer

!

Uitvoer links uitgelijnd

<

Uitvoer van kleine letters

>

Uitvoer van hoofdletters



Interessante functies : conversiefuncties

NT = numerieke tekenreeks, T = tekenreeks, N = numeriek

Cbool(NT)

Conversie naar Boolean

Cbyte(NT)

Conversie naar Byte

CCur(N)

Conversie naar Currency

Cdate(NT)

Conversie naar Date

CDbl(NT)

Conversie naar Double

CDec(N)

Conversie naar Decimal

CInt(NT)

Conversie naar Integer

CLng(NT)

Conversie naar Long

CSng(NT)

Conversie naar single

CVar(NT)

Conversie naar Variant, verwerkt als enige functie elke willekeurige expressie tot een resultaat

CStr(N)

Conversie naar String

Val(T)

Conversie naar String

Hex(NT)

Conversie naar Hexadecimaal getal (Basis : 16)

Oct(NT)

Conversie naar Octaal getal (Basis : 8)

Fix(NT)

Conversie naar Integer, decimale posities worden afgekapt

Int(NT)

Conversie naar Integer, decimale posities worden afgekapt

Partition(N, start, stop, interval)

Levert een tekenreeks die het interval bevat waarbinnen de opgegeven getalswaarde zich bevindt. Start en Stop geven een bereik aan, Interval geeft de toegestane intervalgrootte aan

Str(T)

Conversie naar String




Sub Conversies()

Dim erg As Variant

erg = 12.45

erg = CStr(erg) & “67” ‘geeft als resultaat “12.4567”

erg = CDbl(erg) + 22 ‘geeft als resultaat 34.4567

Msgbox CStr(erg)

erg = CInt(erg) + 1 ‘Integer : 34

‘Uitvoer


MsgBox CStr(erg) ‘String : “35”

End Sub



Tekenreeksfuncties

Lefts(s,p)

Retourneert het aangegeven aantal tekens vanaf de linkerkant van de tekenreeks

Rights(s,p)

Retourneert het aangegeven aantal tekens vanaf de rechterkant van de rekenreeks

Mid(s,p,a)

Retourneert het aangegeven aantal tekens vanaf de tekenreeks s

InStr(s,p)

Retourneert de positie waarvandaan het patroon p in de tekenreeks s voorkomt

Ltrim(s)

Verwijder voorlopende spaties uit de tekenreeks s

Rtrim(s)

Verwijder afsluitende spaties

Len(s)

Retourneert aantal tekens

Lcase(s)

Naar kleine letters

Ucase (s)

Naar grote letters

StrConv(s,a)

Converteert alle tekens in s conform de stuurinfo a

Space(n)

Produceert tekenreeks, opgebouwd uit spaties, met lengte n

String(z,n)

Produceert een tekenreeks, opgebouwd uit het opgegeven teken z, met lengte n

Splits(s)

Verdeelt een tekenreeks in een array Strings

Join(s,…)

Voegt een aantal afzonderlijke tekenreeksen samen tot één tekenreeks

Chr(n)

Retourneert het teken met de ASCII-code n

Asc(T)

Retourneert ASCII-code van teken z

Str(n)

Converteert getal n naar string “n”

Val(s)

Converteert string s naar een Integers






Klassen en objecten

Klassemodules (SWN)

Definitie van een klasse


Extensie CLS.

Voorbeeldklasse


Maak een klassemodule aan met de naam STACK.CLS

Objecten

Aanmaken van objecten


Objecten maken met functies of New

Benadering

Test van de objectvariabelen

Verzamelingen

Arrays en verzamelingen

Gebruik van de verzameling

Voorbeeld


Programmeertechnieken voor gevorderden

Het Dictionary-object

Aanmaken en gebruik

Eigenschappen en methodes

Voorbeeld

Reguliere expressies

Het RegExp-object

Patronen

Besturing van de zoekactie

Beheer van vindplaatsen

Windows API-routines

DLL-bestanden en VBA

Declaratie van de uitwisselingskanalen

Doorgeven van argumenten


Benadering van het bestandssysteem

Klassieke benadering van het bestandssysteem

De directorystructuur

Bestanden bewerken

Een voorbeeld

Klassieke bestandsbewerking

Openen en sluiten van bestanden

LOF() en EOF()

Sequentiële bestandsbewerking

Random bestanden bewerken

Moderne benadering van he’t bestandssysteem

Objecthiërarchie en –benadering

Het FileSystemObject-object

De Drives-verzameling en het Drive-object

De Folders-verzameling en het folder-object

De Files-verzameling en het File-object

Moderne bestandsbewerking


Gebruikersinterface
VBA en Word

Word-objecten


Meer over VBA en Word
VBA en excel

Excel-objecten

Eigenschappen en methode

Benadering van Excel-objecten

Objectgebeurtenissen

Excel-objectverzamelingen

Wat zijn excel-objectverzamelingen ?

Benaderen van object-verzamelingen

Voorbeeld

Excel en het application-object

Bestanden zoeken

Benaderen van geactiveerde objecten

Tijdgestuurde uitvoering van routines

WorkBooks-verzameling en WorkBook-objecten

Werkmappen beheren

Opmaakprovielen

Bereiknamen


Meer over VBA en excel

De inhoud van een werkmap

Organisatie

Aanmaken en verwijderen van een blad

Benaderen van bladen

Bladen markeren en activeren

Kopiëren en verplaatsen van bladen

Voorbeeld


WorkSheets.Cells(1,1).Formula


-ActiveWorkSheet.Cells(1,1).Formula = “=SOM(B1:B99)”

Colums & Rows

-ActiveWorkSheet.Colums(1).Methode


Geen coördinaten : alle rijen, alle cellen

-ActiveWorkSheet.Cells.Value=” “

-ActiveWorksheet.Rows.Eigenschap = …



Worksheets(“x”).UsedRange

-welke cellen zijn al ingevuld

Workscheet(“”).FillAcrossSheets()

-om UsedRange naar andere werkbladen te kopiëren

-WorkSheets(“Berekeningen”).FillAcrossSheets UsedRange,_ xlFillWithAll



Worksheets.Names : om alle bereiknamen te benaderen

.Next.Name

.Previous.Name

For Each n In ActiveWorkSheet.Names

Debug.Print n.Name, n.RefersToRange.Address

Next
Debug.Print ActiveWorkSheet.Name

Debug.Print ActiveWorkSheet.Next.Name

Debug.Print ActiveWorkSheet.Previous.Name


ActiveWorksheet.Range

-Range (“A1:A9”)

-Range (Cells(1,1), Cells (9,1))

-Range(“Berekeningen”)


Resize : Bereik wijzigen

-naar 5x5

-enkel aantal kolommen

O = Range(“invoer”)

O = O.Resize (5,5)

O = O.Resize (,5)


-activate

-Select

Range(“A1”).Activate

Range(3A1:A99”).Select





vbCrlf : enter
Welke gedefinieerde bereiken zijn er ?
o.RefersTo geeft adres van object
o.RefersToRange.Count geeft weer hoeveel cellen in object

Sub InfoRangeSize()

Dim o As Object

Dim t As String

Dim iserwat As Boolean


t = "Bereik" & vbTab & "Adressen" & vbTab & vbTab & "Grootte" & vbCrLf & vbCrLf
For Each o In ActiveWorkbook.Names

iserwat = True

t = t & o.Name & vbTab & o.RefersTo & vbTab & o.RefersToRange.Count & vbCrLf

Next
If iserwat = False Then

t = "Geen benoemde" & vbCrLf & "bereiken aanwezig"

End If
MsgBox Prompt:=t, Title:="Informatie over bereiken"

End Sub



ActiveCell.Address : adres
Selection.Address


Sub Adressen()

Debug.Print ActiveCell.Address


Debug.Print Application.Selection.Address

End Sub



Geef iedere kolom in bereik andere kleur

UsedRange.Address
Alle objecten in klasse Columns afgaan

Rnd ??
.Interior.Color =RGB(r,g,b)

.Interior.Pattern =


Sub GebruiktBereik()

Dim r As Integer,

Dim g As Integer

Dim b As Integer

Dim a As String

Dim o As Object


a = ActiveSheet.UsedRange.Address

MsgBox Prompt:="Momenteel gebruikt gebied : " & vbCrLf & a


For Each o In ActiveSheet.UsedRange.Columns

r = Rnd * 255

g = Rnd * 255

b = Rnd * 255

o.Interior.Color = RGB(r, g, b)

o.Interior.Pattern = xlPatternCrissCross

Next

End Sub



Met For…to vijf cellen verder gaan en dan tien cellen terug gaan
.Next.Activate
.Previous.Activate



Sub TestVanBurenBezoek()

Dim z As Object,

Dim i As Integer

z = ActiveCell

Debug.Print z.Address
For i = 1 To 5

ActiveCell.Next.Activate

Debug.Print ActiveCell.Address

Next
z.Activate

For i = 1 To 10

ActiveCell.Previous.Activate

Debug.Print ActiveCell.Address

Next
z.Activate

End Sub


Welke cellen liggen rond huidig geselecteerde cel ?

Offset (kolom,rij)


Tegen de klok in (step-1).


Sub WaardenVanDeBuren()

Dim o As Object

Dim I As Integer

Set o = ActiveCell

Debug.Print o.Address
For I = -1 To 1

Debug.Print o.Offset(-1, I).Address

Next

Debug.Print o.Offset(0, 1).Address


For I = 1 To -1 Step -1

Debug.Print o.Offset(1, I).Address

Next

Debug.Print o.Offset(0, -1).Address



End Sub


xlShiftToLeft


Range(“A1:F10”).Delete xlShiftToLeft

Range(“A1:F10”).Insert xlShiftToRight

Range(“A1:F10”).Delete xlShiftUp

Range(“A1:F10”).Insert xlShiftDown




Characters


om afzonderlkijke letters te benaderen. 1ste letter en aantal te bewerken letters is op te geven

Clear()


ClearContents () opmaak behouden

Autofill(), DataSeries() : lijsten waarden




ClearContents()

Celinhoud weg maar opmaak behouden

Autofill()

DataSeries()

Lijsten waarden


Celformaten


Borders met eigenschappen Color en LineSyle ( xlConituous, xlDouble, xlLineStyleNone).


Hoe 1 kant kiezen om te bewerken ?

vb : xlInsideHorizontal, xlInsideVertical, xlDiagonalDown, xlDiagonalUp, xlEdgeBottom, …..)

With Range (“A1:F10”)

.Borders(xlEdgeLeft).LineStyle = xlDouble

.Borders(xlEdgeRight).LineStyle = xlLineStyleNone

.Borders(xlTop).LineStyle = xlContinuous

.Borders(xlBottom).LineStyle= xlDouble

End With


Alternatief borders ?

Range(“A1:F10”).BorderAround Linestyle := xlDouble


Font


Eigenschappen : Bold, Italic, Strikethrough, Size, Name

Range(“kolommen”).Font.Size = 20

Range(“kolommen”).Columns.Autofit ‘autoaanpassen van kolommen igd cel niet langer groot genoeg na aanpassing Size


Voorbeeld celopmaak
.Count : telt aantal cellen in bereik

Sub OpmaakTest()

Dim i As Integer


With Range("A1:F1")
For i = 1 To .Count
With .Cells(ColumnIndex:=i)

.Interior.Color = RGB(255, 0, 0)

.Formula = "kolom" & Str(i)
With .Borders(xlEdgeBottom)

.LineStyle = xlDouble

.Color = RGB(0, 0, 255)

End With
With .Font

.Bold = True

.Underline = True

.Name = "Courier New"

.Size = 25

End With
Next
With Range("A1:F10")

.BorderAround LineStyle:=xlDouble

.Columns.AutoFit

End With


End Sub


Grafiekbladen en hun grafieken

Een geval apart : ingebedde grafieken

Datareeksen

Grafiektypen

Voorbeeld


VBA en Access
VBA en ADO
VBA en Outlook



De database wordt beschermd door het auteursrecht ©opleid.info 2017
stuur bericht

    Hoofdpagina