Hvordan bruke If

If-Then er VBA viktigste kontrollstruktur. Du vil trolig bruke denne kommandoen på en daglig basis. Bruk If-Then struktur når du ønsker å utføre en eller flere utsagn. Den valgfrie Else klausulen, hvis inkludert, kan du utføre en eller flere uttalelser om tilstanden du tester er ikke anbefale sant. Her er en enkel CheckUser prosedyre, omkodet til å bruke If-Then-Else struktur:
Sub CheckUser2 () Name = InputBox ("Skriv navnet ditt:") Hvis Name = "Satya Nadella" Så MsgBox ("Velkommen Satya ..." ) '... [Mer koden her] ... Else MsgBox "Sorry. Bare Satya Nadella kan kjøre dette "End IfEnd Sub
If-Then eksempler

Følgende rutine viser If-Then struktur uten tilleggs Else klausul:
Sub GreetMe () Hvis Time. ≪ 0.5 Deretter MsgBox "Good Morning" End Sub

GreetMe prosedyren bruker VBA Time-funksjonen for å få systemet tid. Hvis gjeldende tid er mindre enn 0,5, rutine viser en vennlig hilsen. Hvis tid er større enn eller lik 0,5, rutine endene, og ingenting skjer.

Hvis du vil vise en annen hilsen hvis tid er større enn eller lik 0,5, kan du legge til en annen If-Then uttalelse etter den første:
Sub GreetMe2 () Hvis Time < 0.5 Deretter MsgBox "Good Morning" Hvis Tid > = 0.5 Deretter MsgBox "God ettermiddag" End Sub

Legg merke til at > = (større enn eller lik) brukes for andre If-Then uttalelse. Dette sikrer at hele dagen er dekket. Hadde > (større enn) blitt brukt, ville ingen melding om denne prosedyren ble utført på nøyaktig 12.00. Det er ganske usannsynlig, men med et viktig program som dette, trenger du ikke ønsker å ta noen sjanser.

En If-Then-Else eksempel

En annen tilnærming til det foregående problemet bruker Else klausul. Her er den samme rutinen omkodet til å bruke If-Then-Else struktur:
Sub GreetMe3 () Hvis Time < 0.5 Deretter MsgBox "Good Morning" Else _ MsgBox "God ettermiddag" End Sub

Legg merke til at linjefortsettelsestegnet (understrek) brukes i det foregående eksempelet. If-Then-Else uttalelsen er faktisk en enkelt setning. VBA gir en litt annen måte koding if-then-Else konstruksjoner som bruker en End If uttalelse. Derfor kan GreetMe prosedyre omskrives som
Sub GreetMe4 () Hvis Time < 0.5 Deretter MsgBox "Good Morning" Else MsgBox "Good Afternoon" End IfEnd Sub

Faktisk kan du sette inn en rekke uttalelser under Hvis deler og en rekke uttalelser under Else delen. Denne syntaksen er lettere å lese og gjør uttalelsene kortere

Hva om du trenger å utvide GreetMe rutine for å håndtere tre forhold:. Morgen, ettermiddag og kveld? Du har to alternativer: Bruk tre-hvis-så uttalelser eller bruke en nestet
If-Then-Else struktur. Nesting
betyr å plassere en If-Then-Else struktur innenfor en annen If-Then-Else struktur. Den første tilnærmingen, ved hjelp av tre if-then uttalelser, er enklere:
Sub GreetMe5 () Dim Msg As String Hvis Tid < 0.5 Så Msg = "Morning" Hvis Tid > = 0,5 og Tid < 0.75 Så Msg = "Afternoon" Hvis Tid > = 0,75 Så Msg = "Evening" MsgBox "Good" & MsgEnd Sub

en ny vri ble tilsatt ved bruk av en variabel. MSG variabel får en annen tekstverdi, avhengig av tid på døgnet. Den MsgBox uttalelse viser hilsenen. Good Morning, Good Afternoon, eller Good Evening

Følgende rutine utfører den samme handlingen, men bruker en If-Then-End If struktur:
Sub GreetMe6 () Dim Msg Som String Hvis Tid < 0.5 Så Msg = "Morning" End If Hvis Tid > = 0,5 og Tid < 0.75 Så Msg = "Afternoon" End If Hvis Tid > = 0,75 Så Msg = "Evening" End If MsgBox "Good" & MsgEnd Sub
Bruke ElseIf

I de foregående eksemplene er hvert utsagn i rutinen henrettet. En litt mer effektiv struktur ville gå ut av rutinen så snart en betingelse er funnet å være sant. I morgen, for eksempel, bør prosedyren vise Good Morning meldingen og deretter avslutte -. Uten å vurdere andre overflødige forhold

Med en liten rutine som dette, trenger du ikke å bekymre deg for gjennomføring hastighet. . Men for større applikasjoner hvor hastighet er kritisk, bør du vite om en annen syntaks for If-Then struktur

Her er hvordan du kan omskrive GreetMe rutine ved å bruke denne syntaksen:
Sub GreetMe7 () Dim msg Som String Hvis Tid < 0.5 Så Msg = "Morning" ElseIf Tid > = 0,5 og Tid < 0.75 Så Msg = "Afternoon" Else Msg = "Evening" End If MsgBox "Good" & MsgEnd Sub

Når en betingelse er sann, utføres VBA de betingede uttalelser, og hvis strukturen slutter. Med andre ord, er denne prosedyren litt mer effektiv enn de tidligere eksempler. Avveiningen er at koden er vanskeligere å forstå.

En annen If-Then eksempel

Her er et annet eksempel som bruker enkel form av If-Then struktur. Denne prosedyren ber brukeren om en mengde og viser deretter passende rabatt, basert på mengden brukeren taster:
Sub ShowDiscount () Dim Antall As Long Dim Rabatt As Double Antall = InputBox ("Skriv Antall:") Hvis Antall > 0 Then Rabatt = 0,1 Hvis Kvantum > = 25 Da Rabatt = 0.15 Hvis Kvantum > = 50 Da Rabatt = 0,2 Hvis Kvantum > = 75 Deretter Rabatt = 0.25 MsgBox "Rabatt:" & DiscountEnd Sub

Legg merke til at hver If-Then-setningen i denne rutinen er utført, og verdien for Discount kan endres etter hvert som de utsagnene er utført. Men rutinen til slutt viser den riktige verdien for rabatt fordi if-then uttalelser er i rekkefølge stigende Rabatt verdier.

Følgende prosedyre utfører de samme oppgavene ved hjelp av alternative ElseIf syntaks. I dette tilfellet, avslutter rutine umiddelbart etter gjennomføring av uttalelsene for en sann betingelse:
Sub ShowDiscount2 () Dim Antall As Long Dim Rabatt As Double Antall = InputBox ("Skriv Antall:") Hvis Quantity & gt; 0 og kvantitet & lt; 25 Da Rabatt = 0,1 ElseIf Antall & gt; = 25 og kvantitet & lt; 50 Da Rabatt = 0,15 ElseIf Antall & gt; = 50 og kvantitet & lt; 75 Deretter Rabatt = 0,2 ElseIf Antall & gt; = 75 Deretter Rabatt = 0.25 End If MsgBox "Rabatt:" & DiscountEnd Sub

Disse multiple If-Then strukturer er ganske tungvint. Det kan være lurt å bruke If-Then struktur bare for enkle binære beslutninger. Anmeldelser