Arbejde med operatorer
Stryg for at vise menuen
Deklarering af variabler giver dig et sted at gemme værdier. Operatorer er måden, hvorpå du kombinerer, sammenligner og tester disse værdier — hvilket i bund og grund er, hvordan du udtrykker en forretningsregel i kode. "Er lageret under genbestillingsniveau?" er en sammenligningsoperator. "Genbestil hvis lageret er lavt OG produktet er Elektronik" er en logisk operator.
Aritmetiske operatorer
De fleste af disse fungerer præcis som forventet fra en lommeregner, men VBA har to divisionsoperatorer, der gør noget reelt forskelligt:
Dim total As Double
total = 45 * 3 ' multiplication → 135
total = 100 / 3 ' division → 33.33...
total = 100 \ 3 ' integer division → 33 (drops remainder)
total = 100 Mod 3 ' remainder only → 1
total = 2 ^ 3 ' exponent → 8
Backslash (\) og Mod er de to, der ofte forvirrer, fordi de ligner hinanden, men besvarer modsatte spørgsmål. 100 \ 3 besvarer "hvor mange hele gange går 3 op i 100?" — svaret er 33, og det, der er tilbage, ignoreres. 100 Mod 3 besvarer det modsatte spørgsmål, "hvad er tilbage, efter at 3 er gået op i 100 så mange hele gange som muligt?" — svaret er 1. Tilsammen giver 33 grupper af 3 plus en rest på 1 tilsammen 100 — det er ikke en tilfældighed, det er præcis, hvad de to operatorer er designet til at opdele. Dette par bruges typisk til at beregne "hvor mange hele kasser med 3 kan jeg pakke, og hvor mange enheder er der tilbage til en delvis kasse?" eller til at tjekke, om et rækkenummer er lige (i Mod 2 = 0).
Sammenligningsoperatorer
Disse returnerer True eller False:
44 > 30 ' True
44 = 44 ' True
"Office" = "office" ' False — VBA's default string comparison IS case-sensitive
44 <> 30 ' True (not equal)
Logiske operatorer
Disse kombinerer to eller flere sammenligninger til et enkelt sandt/falsk-resultat — præcis hvordan en forretningsregel med flere betingelser udtrykkes:
If category = "Electronics" And stock < 30 Then
' triggers only if BOTH are true
End If
If category = "Office" Or category = "Electronics" Then
' triggers if EITHER is true
End If
If Not (stock < reorderLevel) Then
' triggers if stock is NOT below reorder level
End If
And kræver, at alle betingelser, der forbindes med den, er True, før hele udtrykket er True — det første eksempel udløses kun for elektronikprodukter, der også reelt har lavt lager, ikke for alle produkter med lavt lager uanset kategori. Or kræver kun, at én betingelse er True, hvilket bruges til at tjekke medlemskab i et lille sæt af acceptable værdier. Not vender blot et True/False-resultat til det modsatte — det bruges ofte, som i det tredje eksempel, til at udtrykke en regel som "IKKE den dårlige tilstand", når det læses mere naturligt end at omskrive den gode tilstand direkte.
Sammenkædning af tekststrenge
Sammenføjer tekst med & (ikke +, som VBA reserverer til tal):
Dim message As String
message = "Product: " & productName & " | Stock: " & currentStock
' Product: Wireless Mouse | Stock: 134
Bemærk, at currentStock er et tal (134), ikke tekst, men det sammenkædes i strengen uden nogen konvertering — VBA konverterer automatisk et tal til dets tekstrepræsentation, når du bruger & på det. Denne bekvemmelighed er præcis grunden til, at & foretrækkes frem for + til at sammenføje tekst: hvis du skrev "Stock: " + currentStock, ville VBA forsøge at tolke hele udtrykket som aritmetik og enten give en fejl eller et forvirrende resultat, afhængigt af konteksten. & betyder altid "sammenføj som tekst" uden tvetydighed.
Opgave
- Brug Monitor Arm's data (Price 89.99, Stock 18, Reorder Level 10), og skriv et udtryk, der tjekker, om lageret er mindre end eller lig med genbestillingsniveau plus 10 — en "nærmer sig"-advarsel i stedet for en hård alarm.
- Byg en sammenkædet besked: "Monitor Arm er på 18 enheder (genbestilling ved 10)" ved hjælp af variabler, ikke hårdkodet tekst.
1. Udtrykket "er ved at være lavt"
- Du skal først bruge tre variabler: én til at holde lagerbeholdningen (18), én til genbestillingsniveauet (10), og derefter et udtryk, der sammenligner dem.
- "Mindre end eller lig med" er en enkelt sammenligningsoperator
<=. - Udtrykket "genbestillingsniveau plus 10" betyder, at du ikke sammenligner lageret direkte med 10 — du sammenligner det med en beregnet værdi. Skriv denne addition direkte i sammenligningen:
stock <= reorderLevel + 10. - For faktisk at se resultatet, kan du tildele det til en
Boolean-variabel. - Udregn manuelt hvad
10 + 10er, før du kører det, så du ved om18 <= 20skal giveTrueellerFalse, og tjek at din kode er enig.
2. Opbygning af beskeden
- Operatoren, der sammensætter tekst, er
&, ikke+. - Se på det ønskede output stykke for stykke:
"Monitor Arm is at "+ (lagerantallet) +" units (reorder at "+ (genbestillingsniveauet) +")". Tæl stykkerne — der er fem, som skifter mellem tekst i anførselstegn og en variabel. - Opgaven siger "brug variabler, ikke hardkodet tekst" — det betyder, at
18og10i din endelige besked skal komme fra dine stock- ogreorderLevel-variabler, ikke være skrevet direkte ind som tal i strengen. - Når du sammenkæder et tal med
&, behøver du ikke nogen konvertering — VBA laver det automatisk om til tekst, så du kan sætte en numerisk variabel direkte ind i strengen. - Byg det først ind i én
String-variabel (message = ...), og vis det derefter medMsgBox message, så du kan tjekke, at det matcher det forventede output nøjagtigt, inklusive parenteser og mellemrum.
Eller brug følgende kode
Åbn Section_2_VBA_Fundamentals.xlsm, tryk på Alt+F11, og brug det modul, du har arbejdet i for denne projektmappe (indsæt et via Indsæt → Modul, hvis du ikke har et endnu — følg samme mønster som modIntro i afsnit 1, du kan kalde det modFundamentals).
Sub MonitorArmCheck()
Dim stock As Integer
Dim reorderLevel As Integer
Dim isGettingClose As Boolean
Dim message As String
stock = 18
reorderLevel = 10
' Part 1 — the "getting close" check
isGettingClose = stock <= reorderLevel + 10
MsgBox isGettingClose
' Part 2 — the concatenated message
message = "Monitor Arm is at " & stock & " units (reorder at " & reorderLevel & ")"
MsgBox message
End Sub
Klik et vilkårligt sted inde i Sub, og tryk derefter på F5. Du bør se to beskedbokse dukke op efter hinanden — først True (da 18 ≤ 20), derefter sætningen.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat