Excel VBA

Hurtig response på opgaver.

Udfordrende opgaver.

Flemming Pedersen, Semco Maritime

Excel VBA

Super form for kursus, har været perfekt at jeg kunne koncentrere mig om kurset når jeg havde tid.

Hurtig tilbagemelding på øvelser og altid hurtigt svar tilbage når man havde brug for hjælp.

Lækkert at man får dine løsningsforslag så man kan få ideer til at skrive scriptet på en anden måde.

Henrik Madsen, Alfa Laval Kolding A/S

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

Excel VBA

Det har været meget nærværende og personlig fjernundervisning med hurtige svar på spørgsmål og feedback på opgaver. Der har været stor engagement og ejerskab fra underviserens side.

Det faglige niveau har været vekslende mellem "begynder" og "ekspert" opgaver.

Brian Deleuran, Radiometer

Excel VBA

Det har været super, at kontakten til underviseren har været tilstede under hele kurset. Fornemmelsen af, at han bare sad og ventede på, jeg sendte den næste opgave, var betryggende. Opgaverne kom også hver gang hurtigt retur.

Alle min forventninger blev mere end indfriet, og jeg kan varmt anbefale et kursus fra IT-Fjernundervisning.

Arne Mathiesen, privat

< >
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.