Excel VBA

Det har bestemt været pengene værd. Jeg kender flere, som har taget VBA kursus on-site i et par dage eller deromkring , og de har slet ikke fået det samme ud af det som jeg har via denne side. Jeg har allerede udviklet små og større modeller til min arbejdsplads, og modellerne bruges allerede internationalt, det havde jeg ikke kunnet uden dette kursus.

Det er kanon, at man får personlig feedback og det går som regel tilmed hurtigt. Dygtig læremester, som sætter sig ind i mine specifikke problemstillinger - det er et stort plus. Den personlige kontakt er max vigtig.

Jeg vil anbefale dette til andre, der spørger til dette.

Michael Mortensen, DLH

Excel VBA

Tak for et rigtigt godt og lærerigt kursus.

En af de store fordele ved kurset er, at man kan tage det i det tempo man ønsker og der er ikke noget tidspres.

Opgaverne er gode og udfordrene. Man kan selv, indenfor rammerne, bestemme hvor meget man vil gøre ud af det.

Beskrivelserne til opgaverne er lavet på en sådan måde, at der er også overladt lidt til ens egen fantasi, som jeg synes er en meget god ting.

Kurset har et rigtigt godt niveau, og materialet er godt lavet.

Underviseren ??? Ja, jeg ved ikke hvornår han sover.

Der går ikke lang tid efter man har sendt en opgave, til den er rettet, og altid med en god og konstruktiv kommentar. Også man får underviserens løsningsforslag.

Der er altid hurtig og god hjælp at hente, hvis man er gået i stå. Man får ikke bare løsningen, men et hint, så man kan komme videre.

Jeg vil varmt anbefale det til andre, og gør det !

Endnu engang tak for et godt kursus.

Med venlig hilsen

Peter Juul Jacobsen

Peter Juul Jacobsen, Mærsk Olie & Gas A/S

Excel VBA

Det har været godt at selv kunne bestemme farten, samt bruge al den tid man nu selv synes for at lave opgaverne.

Det har været et hårdt kursus, men jeg har virkelig lært meget og er mere rustet til at lave nye makroer, hvor jeg så selv kan gå i i VBA og lave rettelser, fordi jeg kan forstå programmet.

Margit Gravgaard Larsen, Novo Nordisk A/S

Excel VBA

Hurtig respons.
Får en til at tænke selvstændigt.
Hjælpsom.

Ole Cordes Kristensen, Ce-Tec

Excel VBA

Jeg har gennemført kurset Excel VBA. Jeg var skeptisk overfor måden at lære på inden jeg gik i gang, men jeg må sige at min skepsis blev gjort til skamme. Lige fra første lektion følte jeg at jeg virkelig lærte noget.

Thors tilgang til materialet er perfekt. Gennem løbende øvelser får man lejlighed til at afprøve teorien i praksis.

Beder man om lidt hjælp, så kommer den lynhurtig – men det er kun et hint og så kan man selv finde ud af resten – det er perfekt for herved tvinges eleven til at tænke sig om – mon det kan bruges i folkeskolen også :).

Kurset er ALLE pengene værd og kan køres når man har tid og er motiveret. Holder man for lange pauser i undervisningen, så komme Thors pegefinger i form af en mail og så er det bare om at komme i gang igen :)

Jacob Madsen, Mettler-Toledo A/S

< >
Se flere referencer

Variabler

Vi har tidligere stødt på variabler et par gange. Man kan tænke på en variabel, som en slags kasse man kan gemme ting (tal, tekster mm.) i til senere brug. Det er god stil at fortælle systemet at man gerne vil bruge en variabel og hvilken datatype man gerne vil gemme i variablen. Det ser sådan her ud (kaldes en variabel erklæring):

Dim Variabelnavn As Datatype

Som tidligere nævnt kan man selv bestemme, hvad man vil kalde sine variable. Følgende datatyper kan anvendes i VBA:

Datatype Størrelse Område
Byte 1 byte 0-255
Boolean 2 bytes True eller False
Integer 2 bytes -32.768 til 32.767
Long 4 bytes -2.147.438.648 til 2.147.438.647
Single 4 bytes -3,4028E38 til -1,401E-45 eller
1,401E-45 til 3,4028E38
Double 8 bytes -1,797E308 til -4,940E-324 eller
4,940E-324 til 1,797E308
Decimal 14 bytes +/- 79.228.162.514.264.337.593.950.335 uden decimaler eller
+/- 7,9228162514264337593543950335
Date 8 bytes 1. januar 100 til 31. december 9999
Objekt 4 bytes Reference til objekt
String (variabel længde) 10 bytes + længden af strengen 0 til ca. 2 milliard
String (fast længde) Længen af strengen 1 til ca. 65.400
Variant (med tal) 16 bytes En hvilken som helst talværdi op til størrelsen af en double
Variant (med tekst) 22 bytes + strengens længde Samme område, som en streng med variabel længde

 

Det er muligt at få VBA editoren til at kræve at alle variable erklæres. Det gør man ved at gå ind i Tools | Options og sætte hak i "Require Variable Declaration"

Der er ingen øvelser til denne lektion.

 


 

Lidt om datoer

Et lille eksempel

Dim dtJul As Date
Dim dtIDag As Date
Dim iDageTilJul As Integer
dtIDag = Date ' Giver datoen for i dag
dtJul = DateSerial(Year(dtIDag), 12, 24) ' Juleaften i år
iDageTilJul = Int(dtJul - dtIDag)
If iDageTilJul <= 0 Then
  dtJul = DateSerial(Year(dtToday) + 1, 12, 24)
  iDageTilJul = Int(dtJul - dtIDag)
End If
MsgBox "Der er " & iDageTilJul & " dage til næste juleaften"

Kan du se hvordan det virker?

Læg mærke til, hvilke dato funktioner du har tilgængelig:

 

Og slå op i hjælpefunktionen og se, hvad den enkelte funktion kan hælpe dig med, hvis du ikke lige kan gennemskue den.

 


 

Arrays

VBA tilbyder en Array datatype, som du kan bruge, hvis du har en masse informationer af samme type der hænger sammen f.eks. 20 integeres, 100 tekststrenge etc.

Med

Dim strNavn As String

fortæller du, at du har noget tekst information du gerne vil gemme til senere og at du gerne vil kunne hente det frem igen under navnet strNavn.

Nogen gange har vi ikke bare ét navn vi gerne vil gemme, men f.eks. 10. Er det tilfældet kan vi skrive

Dim strNavne(9) As String ' Man starter med 0

Og på den måde fortælle systemet, at vi har 10 tekststrenge vi gerne vil gemme og hente igen senere (i makroen).

Og skal man gemme noget i det array skriver man blot

strNavne(0) = "Thor Østergaard" 
strNavne(1) = "Anders And" 

osv.

Og så en tand mere avanceret...

Hvis man nu ønsker at gemme adresser sammen med nav ne kan man skrive

Dim atrNavneOgAdresser(9,2) As String

Og fylde infhold på ved at skrive

strNavneOgAdresser(0,0) = "Thor Østergaard"
strNavneOgAdresser(0,1) = "HvorJegBor 12"
strNavneOgAdresser(0,2) = "1234 MinBy"
strNavneOgAdresser(1,0) = "Anders And"
strNavneOgAdresser(1,1) = "Andeby"

Osv.

Jeg må indrømme, at det er forholdsvis sjældendt, at jeg bruger arrays - Excel er i sig selv jo et kæmpe array, hvor man kan hente og gemme data (det er blandt andet det du skal lære på kurset her ;-))

Lidt eksempler

Dim astNavne(20) As String         ' Giver et array af 21 tekststrenge (vi starter med 0)
Dim iLoop As Integer
Dim astAdresser(20, 5) As String   ' Giver 6 adresselinjer til hvert navn
For iLoop = 0 to 20
  astNavne(iLoop) = InputBox("Navn " & iLoop & " tak :-)")
  astAdresser(iLoop, 0) = InputBox("Adresse 1 " & iLoop & " tak :-)")
  astAdresser(iLoop, 1) = InputBox("Adresse 2 " & iLoop & " tak :-)")
  astAdresser(iLoop, 2) = InputBox("Postnummer " & iLoop & " tak :-)")
  astAdresser(iLoop, 3) = InputBox("By " & iLoop & " tak :-)")
  astAdresser(iLoop, 4) = "Danmark"
Next

Giver det mening??

Med LBound og Ubound kan du afgøre top og bund på et aktuelt array.

Ved du ikke, hvor mange elementer du skal have i dit array kan du med funktionen ReDim ændre antallet af elementer i et array:

Dim aiTal() As Integer       ' Et antal tal
ReDim aiTal(5)               ' Giver plads til 6 tal
Dim i As Integer
For i = 0 To 5
  aiTal(i) = i*5
Next
ReDim Preserve aiTal(10)     ' Giver plads til yderligere 5 tal uden at slette de første 6
Dim stBesked As String
For i = 0 to 10
  stBesked = stBesked & aiTal(i) & ", "
Next
MsgBox stBesked

 

Når du har betalt for kurset får du adgang til øvelser til hver lektion. Og når du har fået godkendt din besvarelse får du desuden adgang til mine løsningsforslag med ekstra tips og trix.