Excel VBA

Hurtig response på opgaver.

Udfordrende opgaver.

Flemming Pedersen, Semco Maritime

Excel VBA

Godt med muligheden for sparring med underviser og forslag til andre løsningsmetoder end mine egne - selvom mine også fungerede.

Godt med muligheden for ingen tidsbegræsning for kurset. Havde jeg - pga. arb. situation, brug for.

Anja Hansen, TDC

Excel VBA

Den lette tilgang, og de ret hurtige svar retur. På den måde føler man, man kan få "udnyttet" tiden bedst muligt. 

Jeg kan også godt li' emnerne i øvelserne. De har været meget brugbare - så er det bare at få "overført" til ens egen daglig brug :-)

Tina Eriksen, Skandinavisk Service Partner

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

Øvelserne kan tages i det tempo, der passer en, hvilket gør det muligt at gå i dybden med udvalgt teori og øvelser og inddrage arbejdsrelaterede udfordringer/problemstillinger direkte i kurset.

Der er hurtig respons fra underviser, man bliver udfordret på opgaverne og får ikke lov til og gå videre før en opgave er løst tilfredsstillende.

Kan anbefale kurset til andre.

Brian Lind Olsen, OUH Odense Universitetshospital

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