VBA -uttalande

Om då
VBA Om uttalanden tillåter dig att testa om uttryck är SANT eller FALSKT, kör en annan kod baserat på resultaten.Låt oss titta på ett enkelt exempel:
1 | If Range ("a2"). Värde> 0 Sedan Range ("b2"). Value = "Positive" |
Detta testar om värdet i intervall A2 är större än 0. Om så är fallet, ställer intervall B2 lika med "Positivt"

Obs: Vid testförhållanden använder vi =,>, <,, = jämförelseoperatorer. Vi kommer att diskutera dem mer i detalj senare i artikeln.Här är syntaxen för en enkel If-sats med en rad:
1 | Om [test_expression] då [action] |
För att göra det lättare att läsa kan du använda ett linjefortsättningstecken (understreck) för att expandera If -satserna till två rader (som vi gjorde på bilden ovan):
12 | Om [test_expression] då _[handling] |
12 | If Range ("a2"). Värde> 0 Då _Område ("b2"). Värde = "Positivt" |
Avsluta om
Ovanstående "single-line" if-sats fungerar bra när du testar ett villkor. Men när dina IF -uttalanden blir mer komplicerade med flera villkor måste du lägga till ett "Sluta om" i slutet av if -satsen:
123 | If Range ("a2"). Värde> 0 SedanOmråde ("b2"). Värde = "Positivt"Avsluta om |
Här är syntaxen:
123 | Om [test_expression] då[handling]Avsluta om |
Slutet If betyder slutet på if -satsen.
Låt oss nu lägga till ett ElseIF:
ElseIF - Flera villkor
ElseIf läggs till i en befintlig If -sats. Annars Om testar om ett villkor är uppfyllt
ENDAST om de tidigare villkoren inte har uppfyllts.I föregående exempel testade vi om ett cellvärde är positivt. Nu kommer vi också att testa om cellvärdet är negativt med en ElseIf:
12345 | If Range ("a2"). Värde> 0 SedanOmråde ("b2"). Värde = "Positivt"ElseIf Range ("a2"). Värde <0 SedanOmråde ("b2"). Värde = "Negativt"Avsluta om |

Du kan använda flera ElseIfs för att testa för flera förhållanden:
1234567891011 | Sub If_Multiple_Conditions ()If Range ("a2"). Value = "Cat" DåOmråde ("b2"). Värde = "Meow"ElseIf Range ("a2"). Value = "Dog" DåOmråde ("b2"). Värde = "Woof"ElseIf Range ("a2"). Value = "Duck" DåOmråde ("b2"). Värde = "Quack"Avsluta omAvsluta Sub |

Nu lägger vi till en Annan:
Annan
De Annan kommer att köra om inga andra tidigare villkor har uppfyllts.
Vi avslutar vårt exempel med att använda ett annat för att indikera att om cellvärdet inte är positivt eller negativt måste det vara noll:
1234567 | If Range ("a2"). Värde> 0 SedanOmråde ("b2"). Värde = "Positivt"ElseIf Range ("a2"). Värde <0 SedanOmråde ("b2"). Värde = "Negativt"AnnanOmråde ("b2"). Värde = "Noll"Avsluta om |
Om annat
Den vanligaste typen av If-sats är en enkel If-Else:
1234567 | Sub If_Else ()If Range ("a2"). Värde> 0 SedanOmråde ("b2"). Värde = "Positivt"AnnanOmråde ("b2"). Värde = "Ej positivt"Avsluta omAvsluta Sub |

Kapslade IF: er
Du kan också "häcka" om uttalanden inuti varandra.
1234567891011 | Sub Nested_Ifs ()If Range ("a2"). Värde> 0 SedanOmråde ("b2"). Värde = "Positivt"AnnanIf Range ("a2"). Värde <0 DåOmråde ("b2"). Värde = "Negativt"AnnanOmråde ("b2"). Värde = "Noll"Avsluta omAvsluta omAvsluta Sub |

OM - Eller, Och, Xor, Inte
Därefter kommer vi att diskutera de logiska operatorerna: Eller, Och, Xor, Not.
Om Eller
De Eller operatör testar om minst ett villkor är uppfyllt.
Följande kod testar om värdet i intervall A2 är mindre än 5000 eller högre än 10 000:
123 | If Range ("a2"). Värde 10000 DåOmråde ("b2"). Value = "Out of Range"Avsluta om |

Du kan inkludera flera Ors på en rad:
123 | Om intervall ("a2"). Värde 10000 eller intervall ("a2"). Värde = 9999 sedanOmråde ("b2"). Värde = "Out of Range"Avsluta om |
Om du ska använda flera Ors, rekommenderas det att du använder ett linjetecken för att göra din kod lättare att läsa:
123456 | If Range ("a2"). Värde <5000 Eller _Område ("a2"). Värde> 10000 Eller _Område ("a2"). Värde = 9999 SedanOmråde ("b2"). Value = "Out of Range"Avsluta om |

Om Och
Med operatören And kan du testa om ALLA villkor är uppfyllda.
123 | Om intervall ("a2"). Värde> = 5000 och intervall ("a2"). Värde <= 10000 sedanOmråde ("b2"). Värde = "Inom räckvidd"Avsluta om |

Om Xor
Xor -operatören låter dig testa om exakt ett villkor är uppfyllt. Om nollvillkoren är uppfyllda kommer Xor att returnera FALSKT, om två eller flera villkor är uppfyllda kommer Xor också att returnera falskt.
Jag har sällan sett Xor användas i VBA -programmering.
Om inte
Operatorn Not används för att konvertera FALSE till TRUE eller TRUE to FALSE:
123 | Sub IF_Not ()MsgBox Not (True)Avsluta Sub |
Lägg märke till att operatorn Not kräver att parentes kring uttrycket växlar.
Operatören Not kan också tillämpas på If -uttalanden:
123 | Om inte (intervall ("a2"). Värde> = 5000 och intervall ("a2"). Värde <= 10000) sedanOmråde ("b2"). Value = "Out of Range"Avsluta om |

Om jämförelser
När du gör jämförelser använder du vanligtvis en av jämförelseoperatörerna:
Jämförelseoperatör | Förklaring |
= | Lika med |
| Inte lika med |
> | Större än |
>= | Större än eller lika med |
< | Mindre än |
<= | Mindre än eller lika med |
Men du kan också använda valfritt uttryck eller funktion som resulterar i SANT eller FALSKT
If - Boolsk funktion
När du bygger uttryck för If -uttalanden kan du också använda valfri funktion som genererar SANT eller Falskt. VBA har några av dessa funktioner:
Fungera | Beskrivning |
IsDate | Returnerar SANT om uttrycket är ett giltigt datum |
Är tom | Sök efter tomma celler eller odefinierade variabler |
IsError | Kontrollera om det finns felvärden |
Är inget | Sök efter NULL -värde |
Är Numerisk | Sök efter numeriskt värde |
De kan kallas så här:
1 | If IsEmpty (Range ("A1"). Value) Då MsgBox "Cell Empty" |
Excel har också många ytterligare funktioner som kan kallas med WorksheetFunction. Här är ett exempel på Excel IsText -funktionen:
12 | Om Application.WorksheetFunction.IsText (Range ("a2"). Värde) Sedan _MsgBox "Cell är text" |
Du kan också skapa dina egna användardefinierade funktioner (UDF). Nedan kommer vi att skapa en enkel boolsk funktion som returnerar TRUE. Då kallar vi den funktionen i vårt If -uttalande:
1234567891011 | Sub If_Function ()Om TrueFunction DåMsgBox "True"Avsluta omAvsluta SubFunktion TrueFunction () som boolesktTrueFunction = TrueAvsluta funktion |

Jämför text
Du kan också jämföra text som liknar siffror:
När du jämför text måste du vara uppmärksam på ”Fallet” (övre eller nedre). Som standard anser VBA att bokstäver med olika fall inte matchar. Med andra ord "A" "a".Om du vill att VBA ska ignorera fall, måste du lägga till alternativet Jämför textdeklaration högst upp i din modul:
Efter att ha deklarerat "A" = "a":
12345 | Alternativ Jämför textSub If_Text ()MsgBox "a" = "A"Avsluta Sub |
VBA Om du gillar
Med VBA Like Operator kan du göra inexakta jämförelser av text. Klicka på länken "Like Operator" för att lära dig mer, men vi kommer att visa ett grundläggande exempel nedan:
12345678 | Dim strName som strängstrName = "Mr. Charles"Om strName Gilla "Mr*" DåMsgBox "True"AnnanMsgBox "Falskt"Avsluta om |
Här använder vi ett asterisk "*" jokertecken. * Står för valfritt antal tecken. Så ovanstående If -sats kommer att returnera TRUE. Like-operatören är ett extremt kraftfullt men ofta underutnyttjat verktyg för att hantera text.
Om slingor
VBA Loops låter dig upprepa åtgärder. Att kombinera IF-ELSE med Loops är ett bra sätt att snabbt bearbeta många beräkningar.
Fortsätter vi med vårt positiva / negativa exempel kommer vi att lägga till en för varje loop för att gå igenom ett antal celler:
1234567891011121314 | Sub If_Loop ()Dim Cell som intervallFör varje cell i intervallet ("A2: A6")Om Cell.Value> 0 DåCell.Offset (0, 1) .Value = "Positive"ElseIf Cell.Value <0 SedanCell.Offset (0, 1) .Value = "Negativt"AnnanCell.Offset (0, 1) .Value = "Noll"Avsluta omNästa cellAvsluta Sub |
Om andra exempel
Nu ska vi gå över några mer specifika exempel.
Kontrollera om cellen är tom
Denna kod kontrollerar om en cell är tom. Om den är tom kommer den att ignorera cellen. Om den inte är tom kommer den att mata ut cellvärdet till cellen till höger:
1234567 | Sub If_Cell_Empty ()If Range ("a2"). Value "" ThenOmråde ("b2"). Värde = intervall ("a2"). VärdeAvsluta omAvsluta Sub |
Kontrollera om cellen innehåller specifik text
Instr -funktionen testar om en textsträng finns i en annan sträng. Använd den med en If -sats för att kontrollera om en cell innehåller specifik text:
123 | Om Instr (intervall ("A2"). Värde, "text")> 0 SedanMsgbox "Text hittades"Avsluta om |
Kontrollera om cellen innehåller text
Denna kod testar om en cell är text:
1234567 | Sub If_Cell_Is_Text ()Om Application.WorksheetFunction.IsText (intervall ("a2"). Värde) SedanMsgBox "Cell är text"Avsluta omAvsluta Sub |
Om Goto
Du kan använda resultatet av en If -sats till "Gå till" ett annat avsnitt av kod.
12345678910 | Sub IfGoTo ()Om IsError (Cell.value) DåGå till SkipAvsluta om'Någon kodHoppa:Avsluta Sub |
Ta bort rad om cellen är tom
Med Ifs och loops kan du testa om en cell är tom och i så fall ta bort hela raden.
123456789 | Sub DeleteRowIfCellBlank ()Dim Cell As RangeFör varje cell i intervallet ("A2: A10")Om Cell.Value = "" Då Cell.EntireRow.DeleteNästa cellAvsluta Sub |
Om MessageBox Ja / Nej
Med VBA -meddelanderutor kan du be användaren att välja bland flera alternativ. Meddelandefältet Ja / Nej uppmanar användaren att välja Ja eller Nej. Du kan lägga till en Ja / Nej -meddelanderuta i ett förfarande för att fråga användaren om de vill fortsätta köra proceduren eller inte. Du hanterar användarens inmatning med hjälp av en If -sats.Här är Ja/Nej -meddelanderutan i praktiken:
123456789101112 | Sub MsgBoxVariable ()Dim svar Som heltalanswer = MsgBox ("Vill du fortsätta?", vbQuestion + vbYesNo)Om svar = vbJa DåMsgBox "Ja"AnnanMsgBox "Nej"Avsluta omAvsluta Sub |
VBA If, ElseIf, Else i Access VBA
Funktionerna If, ElseIf och Else fungerar exakt samma i Access VBA som i Excel VBA.
Du kan använda en If -sats för att kontrollera om det finns poster i en Recordset.
