VBA -erklæring

Hvis så
VBA Hvis sætninger giver dig mulighed for at teste, om udtryk er SAND eller FALSK, kører en anden kode baseret på resultaterne.Lad os se på et enkelt eksempel:
1 | Hvis område ("a2"). Værdi> 0 Så område ("b2"). Værdi = "Positiv" |
Dette tester, om værdien i område A2 er større end 0. Hvis ja, indstilles område B2 lig med "Positive"

Bemærk: Ved test af betingelser vil vi bruge =,>, <,, = sammenligningsoperatorer. Vi vil diskutere dem mere detaljeret senere i artiklen.Her er syntaksen til en simpel If-sætning på én linje:
1 | Hvis [test_expression] så [handling] |
For at gøre det lettere at læse kan du bruge et linjefortsætningstegn (understregning) til at udvide If -sætningerne til to linjer (som vi gjorde på billedet ovenfor):
12 | Hvis [test_expression] så _[handling] |
12 | Hvis område ("a2"). Værdi> 0 Så _Område ("b2"). Værdi = "Positiv" |
Afslut Hvis
Ovenstående "single-line" if-sætning fungerer godt, når du tester en tilstand. Men efterhånden som dine IF -erklæringer bliver mere komplicerede med flere betingelser, skal du tilføje en "End If" til slutningen af if -sætningen:
123 | Hvis område ("a2"). Værdi> 0 DerefterOmråde ("b2"). Værdi = "Positiv"Afslut Hvis |
Her er syntaksen:
123 | Hvis [test_expression] så[handling]Afslut Hvis |
Afslutningen Hvis angiver slutningen på if -sætningen.
Lad os nu tilføje et ElseIF:
ElseIF - Flere betingelser
ElseIf tilføjes til en eksisterende If -sætning. Ellers Hvis tester, om en betingelse er opfyldt
KUN hvis de tidligere betingelser ikke er opfyldt.I det foregående eksempel testede vi, om en celleværdi er positiv. Nu vil vi også teste, om celleværdien er negativ med en ElseIf:
12345 | Hvis område ("a2"). Værdi> 0 DerefterOmråde ("b2"). Værdi = "Positiv"ElseIf Range ("a2"). Værdi <0 HerefterOmråde ("b2"). Værdi = "Negativ"Afslut Hvis |

Du kan bruge flere ElseIfs til at teste for flere forhold:
1234567891011 | Sub If_Multiple_Conditions ()Hvis rækkevidde ("a2"). Værdi = "Kat" SåOmråde ("b2"). Værdi = "Meow"ElseIf Range ("a2"). Value = "Dog" HerefterOmråde ("b2"). Værdi = "Woof"ElseIf Range ("a2"). Værdi = "And" SåOmråde ("b2"). Værdi = "Quack"Afslut HvisAfslut Sub |

Nu tilføjer vi en Andet:
Andet
Det Andet vil køre hvis ingen andre tidligere betingelser er opfyldt.
Vi afslutter vores eksempel ved at bruge en anden til at angive, at hvis celleværdien ikke er positiv eller negativ, skal den være nul:
1234567 | Hvis område ("a2"). Værdi> 0 DerefterOmråde ("b2"). Værdi = "Positiv"ElseIf Range ("a2"). Værdi <0 HerefterOmråde ("b2"). Værdi = "Negativ"AndetOmråde ("b2"). Værdi = "Nul"Afslut Hvis |
Hvis ellers
Den mest almindelige type If-sætning er en simpel If-Else:
1234567 | Sub If_Else ()Hvis område ("a2"). Værdi> 0 DerefterOmråde ("b2"). Værdi = "Positiv"AndetOmråde ("b2"). Værdi = "Ikke positiv"Afslut HvisAfslut Sub |

Indlejrede IF'er
Du kan også “rede”, hvis udsagn inde i hinanden.
1234567891011 | Sub Nested_Ifs ()Hvis område ("a2"). Værdi> 0 DerefterOmråde ("b2"). Værdi = "Positiv"AndetHvis område ("a2"). Værdi <0 HerefterOmråde ("b2"). Værdi = "Negativ"AndetOmråde ("b2"). Værdi = "Nul"Afslut HvisAfslut HvisAfslut Sub |

HVIS - Eller, Og, Xor, Ikke
Dernæst vil vi diskutere de logiske operatorer: Eller, Og, Xor, Not.
Hvis Or
Det Eller operatør tester hvis mindst én betingelse er opfyldt.
Følgende kode tester, om værdien i område A2 er mindre end 5.000 eller større end 10.000:
123 | Hvis område ("a2"). Værdi 10000 DerefterOmråde ("b2"). Værdi = "Uden for område"Afslut Hvis |

Du kan inkludere flere Ors i en linje:
123 | Hvis område ("a2"). Værdi 10000 Eller område ("a2"). Værdi = 9999 DerefterOmråde ("b2"). Værdi = "Uden for område"Afslut Hvis |
Hvis du vil bruge flere Ors, anbefales det at bruge en linjefortsættelse for at gøre din kode lettere at læse:
123456 | Hvis område ("a2"). Værdi <5000 Eller _Område ("a2"). Værdi> 10000 Eller _Område ("a2"). Værdi = 9999 DerefterOmråde ("b2"). Værdi = "Uden for område"Afslut Hvis |

Hvis Og
Operatøren And giver dig mulighed for at teste, om ALLE betingelser er opfyldt.
123 | Hvis område ("a2"). Værdi> = 5000 og rækkevidde ("a2"). Værdi <= 10000 DerefterOmråde ("b2"). Værdi = "In Range"Afslut Hvis |

Hvis Xor
Xor -operatøren giver dig mulighed for at teste, om præcis én betingelse er opfyldt. Hvis nul betingelser er opfyldt, returnerer Xor FALSKT, hvis to eller flere betingelser er opfyldt, returnerer Xor også falsk.
Jeg har sjældent set Xor brugt i VBA -programmering.
Hvis ikke
Operatoren Ikke bruges til at konvertere FALSK til SAND eller SAND til FALSK:
123 | Sub IF_Not ()MsgBox Ikke (sandt)Afslut Sub |
Bemærk, at operatoren Ikke kræver, at parentes omkring udtrykket skifter.
Operatoren Not kan også anvendes på If -sætninger:
123 | Hvis ikke (område ("a2"). Værdi> = 5000 og område ("a2"). Værdi <= 10000) SåOmråde ("b2"). Værdi = "Uden for område"Afslut Hvis |

Hvis sammenligninger
Når du foretager sammenligninger, vil du normalt bruge en af sammenligningsoperatorerne:
Sammenligningsoperatør | Forklaring |
= | Svarende til |
| Ikke lig med |
> | Bedre end |
>= | Større end eller lig med |
< | Mindre end |
<= | Mindre end eller lig med |
Du kan dog også bruge ethvert udtryk eller funktion der resulterer i SAND eller FALSK
If - boolsk funktion
Når du bygger udtryk for If -sætninger, kan du også bruge enhver funktion, der genererer SAND eller Falsk. VBA har et par af disse funktioner:
Fungere | Beskrivelse |
IsDate | Returnerer SAND, hvis udtrykket er en gyldig dato |
Er tom | Kontroller, om der er tomme celler eller udefinerede variabler |
ErError | Kontroller for fejlværdier |
Er Null | Tjek for NULL -værdi |
Er Numerisk | Kontroller numerisk værdi |
De kan kaldes sådan:
1 | If IsEmpty (Range ("A1"). Value) Så MsgBox "Cell Empty" |
Excel har også mange ekstra funktioner, der kan kaldes ved hjælp af WorksheetFunction. Her er et eksempel på Excel IsText -funktionen:
12 | Hvis Application.WorksheetFunction.IsText (Range ("a2"). Værdi) Så _MsgBox "Celle er tekst" |
Du kan også oprette dine egne brugerdefinerede funktioner (UDF'er). Nedenfor vil vi oprette en enkel boolsk funktion, der returnerer SAND. Så kalder vi den funktion i vores If -sætning:
1234567891011 | Sub If_Function ()Hvis TrueFunction SåMsgBox "True"Afslut HvisAfslut SubFunktion TrueFunction () Som boolskTrueFunction = TrueAfslut funktion |

Sammenligning af tekst
Du kan også sammenligne tekst, der ligner sammenligning af tal:
Når du sammenligner tekst, skal du være opmærksom på "Case" (øvre eller nedre). Som standard betragter VBA bogstaver med forskellige sager som ikke-matchende. Med andre ord "A" "a".Hvis du vil have, at VBA ignorerer store og små bogstaver, skal du tilføje muligheden Sammenlign tekstdeklaration øverst i dit modul:
1 | Mulighed Sammenlign tekst |
Efter at have givet denne erklæring "A" = "a":
12345 | Mulighed Sammenlign tekstSub If_Text ()MsgBox "a" = "A"Afslut Sub |
VBA Hvis du kan lide
VBA Like Operator giver dig mulighed for at foretage unøjagtige sammenligninger af tekst. Klik på linket "Like Operator" for at lære mere, men vi viser et grundlæggende eksempel herunder:
12345678 | Dim strName som strengstrName = "Mr. Charles"Hvis strName Som "Mr*" SåMsgBox "True"AndetMsgBox "Falsk"Afslut Hvis |
Her bruger vi en stjerne "*" wildcard. * Står for et vilkårligt antal tegn. Så ovenstående If -sætning returnerer SAND. Like-operatoren er et ekstremt kraftfuldt, men ofte underudnyttet værktøj til håndtering af tekst.
Hvis Loops
VBA Loops giver dig mulighed for at gentage handlinger. At kombinere IF-ELSE med Loops er en fantastisk måde at hurtigt behandle mange beregninger på.
I fortsættelse af vores positive / negative eksempel tilføjer vi en For hver sløjfe til at gå gennem en række celler:
1234567891011121314 | Sub If_Loop ()Dim celle som rækkeviddeFor hver celle i området ("A2: A6")Hvis Cell.Value> 0 SåCell.Offset (0, 1) .Værdi = "Positiv"ElseIf Cell.Value <0 HerefterCell.Offset (0, 1) .Value = "Negativ"AndetCell.Offset (0, 1) .Value = "Nul"Afslut HvisNæste celleAfslut Sub |
Hvis andre eksempler
Nu vil vi gå over nogle mere specifikke eksempler.
Kontroller, om cellen er tom
Denne kode vil kontrollere, om en celle er tom. Hvis den er tom, ignorerer den cellen. Hvis den ikke er tom, udsender den celleværdien til cellen til højre:
1234567 | Sub If_Cell_Empty ()Hvis område ("a2"). Værdi "" SåOmråde ("b2"). Værdi = Område ("a2"). VærdiAfslut HvisAfslut Sub |
Kontroller, om cellen indeholder specifik tekst
Instr -funktionen tester, om der findes en tekststreng i en anden streng. Brug den sammen med en If -sætning for at kontrollere, om en celle indeholder specifik tekst:
123 | Hvis Instr (område ("A2"). Værdi, "tekst")> 0 DerefterMsgbox "Tekst fundet"Afslut Hvis |
Kontroller, om cellen indeholder tekst
Denne kode tester, om en celle er tekst:
1234567 | Sub If_Cell_Is_Text ()Hvis Application.WorksheetFunction.IsText (Range ("a2"). Værdi) DerefterMsgBox "Celle er tekst"Afslut HvisAfslut Sub |
Hvis Goto
Du kan bruge resultatet af en If -sætning til "Gå til" en anden sektion af kode.
12345678910 | Sub IfGoTo ()Hvis IsError (Cell.value) SåGå overAfslut Hvis'Nogle koderSpringe:Afslut Sub |
Slet række, hvis cellen er tom
Ved hjælp af Ifs og loops kan du teste, om en celle er tom, og i så fald slette hele rækken.
123456789 | Sub DeleteRowIfCellBlank ()Dim celle som rækkeviddeFor hver celle i området ("A2: A10")Hvis Cell.Value = "" Så Cell.EntireRow.DeleteNæste celleAfslut Sub |
Hvis MessageBox Ja / Nej
Med VBA -meddelelsesbokse kan du bede brugeren om at vælge mellem flere muligheder. Ja / nej -meddelelsesboksen beder brugeren om at vælge Ja eller Nej. Du kan tilføje en Ja / Nej -meddelelsesboks til en procedure for at spørge brugeren, om de vil fortsætte med at køre proceduren eller ej. Du håndterer brugerens input ved hjælp af en If -sætning.Her er Ja/Nej -meddelelsesboksen i praksis:
123456789101112 | Sub MsgBoxVariable ()Dim svar som heltalanswer = MsgBox ("Vil du fortsætte?", vbQuestion + vbYesNo)Hvis svar = vbJa SåMsgBox "Ja"AndetMsgBox "Nej"Afslut HvisAfslut Sub |
VBA If, ElseIf, Else i Access VBA
Funktionerne If, ElseIf og Else fungerer nøjagtig det samme i Access VBA som i Excel VBA.
Du kan bruge en If -sætning til at kontrollere, om der er poster i et Recordset.
