IF-sætning
Den mest brugte måde at styre programmet på, er med IF-sætninger. If...then...else. HVIS en bestemt betingelse er opfyldt SÅ skal der ske noget bestemt ELLERS skal der ske noget andet.If betingelse=true Then
programudtryk
[ElseIf betingelse=true Then]
programudtryk
[Else]
programudtryk
End If
- Betingelsen skal altid resultere i en boolean (True/False).
- Programudtryk er et stykke program som skal udføres.
Et eksempel:
If x < 0 Then
MsgBox "Tallet er negativt"
ElseIf x > 0 Then
MsgBox "Tallet er positivt"
Else
MsgBox "Tallet er nul"
End If
Det er muligt at indbygge IF-sætninger i IF-sætninger, hvilket ikke er usædvanligt at se.
If...Then...Else ses også ofte brugt som manuel fejlhåndtering, f.eks. til at kontrollere for helt konkrete fejlsituationer. Men det er en helt anden historie.
IIF-sætning
En mere simpel løsning er en IIF-sætning:IIf (betingelse, SandUdtryk, FalskUdtryk)
Eksempel:
hoejeste_alder = IIf(johns_alder > peters_alder, johns_alder, peters_alder)
Samme blok kunne vi have skrevet med en IF-sætning sådan:
If johns_alder > peters_alder Then
hoejeste_alder= johns_alder
Else
hoejeste_alder= peters_alder
End If
IIF-sætningen egner sig bedst til små og korte betingelses-blokke.
CHOOSE-sætning
Choose-sætningen giver dig muighed for at vælge fra en liste, baseret på et indeks.Choose (Indeks, Valg_1[, Valg_2, ... [,Valg__n]])
Hvis Indeks er 1 returneres Valg_1, hvis Indeks er 2 returneres Vlag_2 osv.
FOR...NEXT-loop
Denne funktion gentager en blok et bestemt antal gange.For taeller=start To slut [Step trin]
programudtryk
[Exit For]
programudtryk
Next [taeller]
Det er muligt at angive hvordan loopet skal tælle ("Step trin"), men denne parameter udelades ofte, hvilket også gør sig gældende for "Exit For".
Et eksempel:
For n = LBound(oPrinter) To UBound(oPrinter)
sMsg = sMsg + oPrinter(n).Name + Chr(13)
Next n
I eksemplet herover bruger vi UBound(...) som aflutning, hvilket er særdeles praktisk. UBound angiver øvre grænse eller største indeksværdi i et array. På den måde kan for..next bruges til at gennemløbe et array trin for trin.
I min tidligere artikel om årskalender bruger jeg for...next loop rigtig meget: http://libreofficedk.blogspot.dk/2016/10/regneark-i-calc-arskalender.html
DO WHILE loop
Så længe en betingelse er opfyldt, fortsæt med at udføre ...Do While betingelse
programudtryk
Loop
Alternativ syntakt:
Indtil en betingelse er opfyldt, fortsæt med at udføre ...
Do Until betingelse
programudtryk
Loop
Et eksempel fra min artikel om fortløbende nummerering:
Do While NOT EOF(n)
Input #n, s
If result="" then
result = s
Else
result = result + chr(13) + s
end if
Loop
Hele artiklen kan læses her: https://libreofficedk.blogspot.dk/2016/11/fortlbende-nummerering-fortsat_8.html
Vær meget opmærksom på at Do...While...Loop er lidt farlig, fordi den kan ende med et af enhver programmørs værste mareridt, nemlig et endeløst loop. Du skal være 100% sikker på at du faktsik når frem til betingelsen. Ellers vil din makro fortsætte uendeligt (eller til en bruger vælger at afbryde den).
SELECT...CASE-sætning
Vælg fra en liste baseret på et valg.Syntaks:
Select Case betingelses_udtryk
Case tilfælde_1
programudtryk_1
Case tilfælde_2
programudtryk_2
Case Else
programudtryk_3
End Select
Select...Case bruges ofte i tilfælde, hvor antallet af valgmuligheder er fastlagt af omstændighederne. Et godt eksempel er ugedagene, som der er syv af, og det er temmelig fastsat på forhånd.
Funktionen Weekday(dato) returnerer et heltal mellem 1 og 7, hvor 1 er søndag.
Select Case WeekDay( Now )
Case 1
sDay="Søndag"
Case 2
sDay="Mandag"
Case 3
sDay="Tirsdag"
Case 4
sDay="Onsdag"
Case 5
sDay="Torsdag"
Case 6
sDay="Fredag"
Case 7
sDay="Lørdag"
End Select
Msgbox sDay,64,"I dag er det"