Innholdsfortegnelse:
Video: Excel på norsk: Loddtrekning 2024
Hvis-da er VBAs viktigste kontrollstruktur. Du vil nok bruke denne kommandoen daglig. Bruk If-Then-strukturen når du vil utføre en eller flere setninger betinget. Den valgfrie Else-klausulen, hvis inkludert, lar deg utføre en eller flere setninger hvis tilstanden du tester er ikke sann. Her er en enkel CheckUser-prosedyre, omkodet for å bruke If-Then-Else-strukturen:
SubCheckUser2 () UserName = InputBox ("Skriv inn navnet ditt") Hvis UserName = "Satya Nadella" Så MsgBox ("Welcome Satya …") '… [Mer kode her] … Else MsgBox "Beklager. Bare Satya Nadella kan kjøre dette. "End If End Sub
Hvis-Da Eksempler
Følgende rutine demonstrerer If-Then-strukturen uten valgfri Else-klausul:
Sub GreetMe () Hvis Time <0. 5 da MsgBox" Good Morning "End Sub
GreetMe-prosedyren bruker VBAs Time-funksjon for å få systemtiden. Hvis den nåværende tiden er mindre enn. 5, viser rutinen en vennlig hilsen. Hvis tiden er større enn eller lik. 5, rutinen slutter, og ingenting skjer.
For å vise en annen hilsen hvis tiden er større enn eller lik. 5, kan du legge til en annen If-Then-setning etter den første:
Sub GreetMe2 () Hvis Time = 0. 5 Da MsgBox "Good Afternoon" End Sub
Legg merke til at> = (større enn eller lik) brukes til den andre If-Then-setningen. Dette sikrer at hele dagen er dekket. Hadde> (større enn) blitt brukt, ville ingen melding oppstå hvis denne prosedyren ble utført kl. 12.00. Det er ganske lite sannsynlig, men med et viktig program som dette, vil du ikke ta noen sjanser.
Et eksempel hvis det er tilfelle
En annen tilnærming til det foregående problemet bruker Else-klausulen. Her er den samme rutinen omkodet for å bruke If-Then-Else-strukturen:
Sub GreetMe3 () Hvis Time <0. 5 da MsgBox "Good Morning" Else _ MsgBox "Good Afternoon" End Sub
Legg merke til at linjen fortsettelse karakter (understrek) brukes i foregående eksempel. If-Then-Else-erklæringen er faktisk en enkelt setning. VBA gir en litt annen måte å kode If-Then-Else konstruksjoner som bruker en End If-setning. Derfor kan GreetMe-prosedyren omskrives som
Sub GreetMe4 () Hvis Time <0. 5 deretter MsgBox "Good Morning" Else MsgBox "Good Afternoon" End Hvis End Sub
Faktisk kan du sette inn et hvilket som helst antall setninger under Hvis en del og et hvilket som helst antall erklæringer under Else-delen. Denne syntaksen er enklere å lese og gjør uttalelsene kortere.
Hva om du trenger å utvide GreetMe-rutinen for å håndtere tre forhold: morgen, ettermiddag og kveld? Du har to alternativer: Bruk tre If-Then-setninger eller bruk en nestet If-Then-Else-struktur. Nesting betyr å sette en If-Then-Else-struktur i en annen If-Then-Else-struktur. Den første tilnærmingen, med tre If-Then-setninger, er enklere:
Sub GreetMe5 () Dim Msg som streng hvis tid = 0. 5 og tid = 0. 75 deretter Msg = "Evening" MsgBox "Good" & Msg End Sub
En ny vri ble lagt til ved bruk av en variabel. Msg-variabelen får en annen tekstverdi, avhengig av tidspunktet på dagen. MsgBox-setningen viser hilsen: God morgen, god ettermiddag eller god kveld.
Følgende rutine utfører samme handling, men bruker en If-Then-End Hvis struktur:
Sub GreetMe6 () Dim Msg som streng hvis tid = 0. 5 og tid = 0. 75 deretter Msg = "Evening" Slutt hvis MsgBox "Good" og Msg End Sub
Bruke ElseIf
I de tidligere eksemplene blir alle setninger i rutinen utført. En litt mer effektiv struktur ville gå ut av rutinen så snart en tilstand er funnet å være sann. I morgen, for eksempel, bør prosedyren vise god morgenmeldingen og deretter avslutte - uten å vurdere de andre overflødige forholdene.
Med en liten rutine som dette, trenger du ikke å bekymre deg for eksekveringshastigheten. Men for større applikasjoner der hastigheten er kritisk, bør du vite om en annen syntaks for If-Then-strukturen.
Her kan du omskrive GreetMe-rutinen ved å bruke denne syntaksen:
Sub GreetMe7 () Dim Msg som streng hvis tid = 0. 5 og tid <0. 75 da Msg = "Ettermiddag" Else Msg = "Kveld "Slutt hvis MsgBox" God "og Msg sluttdel
Når en tilstand er sant, utfører VBA de betingede setningene, og If-strukturen avsluttes. Med andre ord, denne prosedyren er litt mer effektiv enn de tidligere eksemplene. Avviket er at koden er vanskeligere å forstå.
Et annet eksempel hvis
Her er et annet eksempel som bruker den enkle form for If-Then-strukturen. Denne prosedyren ber brukeren om en mengde og viser deretter den aktuelle rabatten, basert på mengden brukeren kommer inn i:
Sub ShowDiscount () Dim mengde så lang dim rabatt som dobbelt mengde = InputBox ("Enter Quantity:") > 0 Så Rabat = 0. 1 Hvis Mengde> = 25 Så Rabat = 0. 15 Hvis Mengde> = 50 Så Rabat = 0. 2 Hvis Mengde> = 75 Så Rabat = 0. 25 MsgBox "Rabat:" & Rabatt End Sub
Legg merke til at hver If-Then-setning i denne rutinen blir utført, og verdien for Rabatt kan endres etter hvert som uttalelsene blir utført. Rutinen viser imidlertid til slutt den riktige verdien for rabatt fordi If-Then-setningene er i rekkefølge av stigende rabattverdier.
Følgende prosedyre utfører de samme oppgavene ved å bruke den alternative ElseIf-syntaksen. I dette tilfellet slutter rutinen umiddelbart etter at setningene er utført for en ekte tilstand:
Sub ShowDiscount2 () Dim mengde så lang dim rabatt som dobbelt mengde = InputBox ("Enter Quantity:") Hvis antall> 0 og antall <25 deretter rabatt = 0.1 ElseIf Antall> = 25 Og Antall <50 Så Rabatt = 0. 15 ElseIf Antall> = 50 Og Antall <75 Så Rabatt = 0. 2 ElseIf Antall> = 75 Så Rabatt = 0. 25 End Hvis MsgBox "Rabatt:" & Rabatt End Sub
Disse flere If-Then strukturer er ganske besværlig. Du vil kanskje bruke If-Then-strukturen bare for enkle binære beslutninger.