Indholdsfortegnelse:
- Hvis-Så eksempler
- Et eksempel på eksempelvis
- I de foregående eksempler udføres hver sætning i rutinen. En lidt mere effektiv struktur ville forlade rutinen, så snart en tilstand er fundet sand. Om morgenen bør proceduren f.eks. Vise godmorgen besked og derefter afslutte - uden at vurdere de øvrige overflødige forhold.
- Her er et andet eksempel, der bruger den enkle form for If-Then-strukturen. Denne procedure beder brugeren om en mængde og viser derefter den passende rabat baseret på den mængde brugeren indtaster:
Video: Excel - Hvordan aktivere problemløseren 2025
Hvis-da er VBAs vigtigste kontrolstruktur. Du vil sandsynligvis bruge denne kommando dagligt. Brug If-Then-strukturen, når du vil udføre et eller flere udsagn betinget. Den valgfrie Else-klausul, hvis inkluderet, giver dig mulighed for at udføre et eller flere udsagn, hvis tilstanden du tester er ikke sand. Her er en simpel CheckUser-procedure, genkodet til at bruge If-Then-Else-strukturen:
Sub CheckUser2 () UserName = InputBox ("Indtast dit navn:") Hvis UserName = "Satya Nadella" Så MsgBox ("Velkommen Satya …") '… [Mere kode her] … Else MsgBox "Undskyld. Kun Satya Nadella kan køre dette. "End If End Sub
Hvis-Så eksempler
Følgende rutine demonstrerer If-Then-strukturen uden valgfri Else-klausul:
Sub GreetMe () Hvis Time <0. 5 derefter MsgBox" Good Morning "End Sub
GreetMe-proceduren bruger VBAs Time-funktion til at få systemtiden. Hvis den aktuelle tid er mindre end. 5 viser rutinen en venlig hilsen. Hvis tiden er større end eller lig med. 5, rutinen slutter, og der sker ikke noget.
For at vise en anden hilsen, hvis Tiden er større end eller lig med. 5, kan du tilføje en anden If-Then-sætning efter den første:
Sub GreetMe2 () Hvis Time = 0. 5 Så MsgBox "Good Afternoon" End Sub
Bemærk at> = (større end eller lig med) bruges til den anden If-Then-sætning. Dette sikrer, at hele dagen er dækket. Havde> (større end) været brugt, ville der ikke vises nogen besked, hvis denne procedure blev udført kl. 12.00. Det er temmelig usandsynligt, men med et vigtigt program som dette, vil du ikke tage nogen chancer.
Et eksempel på eksempelvis
En anden tilgang til det foregående problem anvender Else-klausulen. Her er den samme rutine omkodet til at bruge If-Then-Else-strukturen:
Sub GreetMe3 () Hvis Time <0. 5 derefter MsgBox "Good Morning" Else _ MsgBox "Good Afternoon" End Sub
Bemærk at linjen fortsættelse karakter (understregning) anvendes i det foregående eksempel. If-Then-Else erklæringen er faktisk en enkelt erklæring. VBA giver en lidt anden måde at kode If-Then-Else konstruktioner, der bruger en End If-sætning. Derfor kan GreetMe-proceduren omskrives som
Sub GreetMe4 () Hvis Time <0. 5 derefter MsgBox "Good Morning" Else MsgBox "Good Afternoon" End Hvis End Sub
Faktisk kan du indsætte et hvilket som helst antal udsagn under Hvis en del og et hvilket som helst antal erklæringer under Else-delen. Denne syntaks er lettere at læse og gør udsagnene kortere.Hvad skal du gøre hvis du skal udvide GreetMe-rutinen til at håndtere tre betingelser: morgen, eftermiddag og aften? Du har to muligheder: Brug tre If-Then-sætninger eller brug en
indlejret If-Then-Else-struktur. Nesting betyder at placere en If-Then-Else-struktur inden for en anden If-Then-Else-struktur. Den første tilgang, der bruger tre If-Then-sætninger, er enklere: Sub GreetMe5 () Dim Msg As String Hvis Time = 0. 5 Og Time = 0. 75 Then Msg = "Evening" MsgBox "Good" & Msg End Sub
Et nyt twist blev tilføjet med brug af en variabel. Msg-variablen får en anden tekstværdi afhængigt af tidspunktet på dagen. MsgBox-sætningen viser hilsen: God morgen, god eftermiddag eller god aften.
Følgende rutine udfører samme handling, men bruger en If-Then-End Hvis struktur:
Sub GreetMe6 () Dim Msg Som String Hvis Time = 0. 5 Og Time = 0. 75 Then Msg = "Evening" Afslut, hvis MsgBox "God" & Msg End Sub
Brug af ElseIf
I de foregående eksempler udføres hver sætning i rutinen. En lidt mere effektiv struktur ville forlade rutinen, så snart en tilstand er fundet sand. Om morgenen bør proceduren f.eks. Vise godmorgen besked og derefter afslutte - uden at vurdere de øvrige overflødige forhold.
Med en lille rutine som denne, behøver du ikke bekymre dig om eksekveringshastigheden. Men for større applikationer, hvor hastigheden er kritisk, bør du vide om en anden syntaks for If-Then-strukturen.
Her kan du omskrive GreetMe-rutinen ved at bruge denne syntaks:
Sub GreetMe7 () Dim Msg As String Hvis Time = 0. 5 Og Time <0. 75 Then Msg = "Afternoon" Else Msg = "Evening "Afslut Hvis MsgBox" God "& Msg Slut Sub
Når en betingelse er sand, udfører VBA de betingede udsagn, og If-strukturen slutter. Med andre ord er denne procedure lidt mere effektiv end de tidligere eksempler. Afvejningen er, at koden er vanskeligere at forstå.
Et andet Hvis-da eksempel
Her er et andet eksempel, der bruger den enkle form for If-Then-strukturen. Denne procedure beder brugeren om en mængde og viser derefter den passende rabat baseret på den mængde brugeren indtaster:
Sub ShowDiscount () Dim Mængde Så Lang Dim Rabat Som Dobbelt Mængde = InputBox ("Indtast Mængde:") Hvis Mængde > 0 Så Rabat = 0. 1 Hvis Mængde> = 25 Så Rabat = 0. 15 Hvis Mængde> = 50 Så Rabat = 0. 2 Hvis Mængde> = 75 Så Rabat = 0. 25 MsgBox "Rabat:" & Rabat Slut Del
Bemærk, at hver If-Then-sætning i denne rutine udføres, og værdien for Rabat kan ændres, når udsagnene udføres. Rutinen viser dog i sidste ende den korrekte værdi for Rabat, fordi If-Then-sætningerne er i rækkefølge af stigende rabatværdier.
Følgende procedure udfører de samme opgaver ved at bruge den alternative ElseIf-syntaks. I dette tilfælde slutter rutinen umiddelbart efter at erklæringerne er udført for en sand tilstand:
Sub ShowDiscount2 () Dim Antal Som Lang Dim Rabat Som Dobbelt Mængde = InputBox ("Indtast Mængde:") Hvis Mængde> 0 Og Mængde <25 derefter rabat = 0.1 ElseIf Antal> = 25 Og Mængde <50 derefter Rabat = 0. 15 ElseIf Antal> = 50 Og Mængde <75 Så Rabat = 0. 2 ElseIf Antal> = 75 Så Rabat = 0. 25 Afslut Hvis MsgBox "Rabat:" & Discount End Sub
Disse flere If-Then strukturer er ret besværlige. Du kan muligvis bruge If-Then-strukturen kun til enkle binære beslutninger.
