Skrivning Af Din Første VBA-procedure
Stryg for at vise menuen
Optagelse af makroer lærer dig ordforrådet; at skrive én fra bunden er der, hvor du begynder at tænke som en programmør.
Opbygningen af en Sub-procedure
Hver genanvendelig blok af VBA-kode, der udfører en handling (i modsætning til at returnere en værdi, hvilket er en Function), skrives som en Sub:
Sub ProcedureName()
' instructions go here
End Sub
Med markøren placeret et vilkårligt sted i en Sub, tryk på F5 (eller klik på den grønne Kør-pil) for at køre den. Kommentarer — enhver linje, der starter med en apostrof (') — ignoreres fuldstændigt af VBA; brug dem flittigt til at forklare hvorfor koden gør noget, ikke kun hvad den gør, da hvad som regel er tydeligt ud fra selve koden.
Formateringsvaner, der straks betaler sig
- Skriv
Option Explicitøverst i hvert modul — det tvinger dig til at erklære alle variabler, hvilket fanger tastefejl, før de bliver til fejl; - Indryk kode inden for løkker og
If-blokke med én Tab — VBE kræver det ikke, men uindrykket kode bliver hurtigt ulæselig; - Brug beskrivende navne (
HighEarnerCount, ikkex) — du vil takke dig selv om tre uger.
Gennemarbejdet eksempel: Fremhævning af højtlønnede
Lad os skrive, manuelt, en procedure der gennemgår hver medarbejder i tabellen og fremhæver alle, der tjener over $55,000 — noget makrooptageren aldrig kunne gøre, fordi det kræver en beslutning (en If-sætning), der gentages for hver række (en løkke).
Option Explicit
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
Dim ws As Worksheet / Dim i As Long— disse erklærer to variabler:wsvil indeholde en reference til Employees-arket, ogivil tælle gennem rækkerne;- Set
ws = ThisWorkbook.Worksheets("Employees")— dette er objektmodel-vanen: navngiv arket eksplicit i stedet for at stole på det aktive ark; ws.Cells(ws.Rows.Count, 1).End(xlUp).Row— et standardudtryk, der finder den sidste anvendte række i kolonneA, uanset hvor mange medarbejdere der er i tabellen;For i = 2 To lastRow ... Next i— en løkke, der gentager koden én gang for hver datarække, startende ved række 2 for at springe overskriften over;- If
ws.Cells(i, 6).Value > 55000 Then— en beslutning: kun rækker hvor lønkolonnen (kolonne 6) overstiger 55000 bliver formateret; MsgBox— en simpel pop-up, der bekræfter at makroen er færdig.
Indtast denne procedure i modIntro, placer markøren inde i den, og tryk på F5. Tjek tallene selv — Emma Davis og Olivia Brown er de to medarbejdere, der tjener over $55.000 i eksempeltabellen.
Opgave
- Indtast
HighlightTopEarnerspræcis som vist i modIntro og kør den. Bekræft at to rækker bliver grønne. - Dublér proceduren som
HighlightITDepartment, og ændr betingelsen, så den fremhæver alle rækker, hvor Afdeling (kolonne 3) er lig med "IT" i stedet for at tjekke Løn. - Tilføj en kommentar over hver procedure, der med én sætning forklarer, hvad den gør — øv dig i at skrive kommentarer til læseren, ikke til dig selv.
- Gem projektmappen igen (det er stadig
.xlsm, så en almindeligCtrl+Ser tilstrækkelig).
- Markér hele
HighlightTopEarners-proceduren (fraSubtilEnd Sub), kopier den, og indsæt den lige nedenunder imodIntro. - Omdøb den anden kopi's
Sub-linje tilSub HighlightITDepartment()— hver procedure i et modul skal have et unikt navn, ellers ved VBA ikke, hvilken du mener, når du prøver at køre den. - Den betingelse, der skal ændres, er
If-linjen. Lige nu tjekker den et tal:
If ws.Cells(i, 6).Value > 55000 Then
Du skal i stedet tjekke tekst — kolonne 3 (Afdeling) skal være lig med "IT". Husk fra Kapitel 2, at tekstsammenligninger kræver anførselstegn omkring værdien, du sammenligner med, og brug = i stedet for >.
4. Alt andet inde i løkken (linjen med Interior.Color, selve løkkestrukturen) kan forblive det samme — kun den betingelse, der testes, ændres.
Tilføjelse af kommentarer
- En kommentarlinje starter med en apostrof (
') og står på sin egen linje direkte overSub-linjen — ikke inde i proceduren. - Skriv den, som om du forklarer makroen til en kollega, der aldrig har set den før, ikke som en påmindelse til dig selv. Sammenlign:
- Ikke så nyttig:
' løber gennem rækker(beskriver hvordan, hvilket koden allerede viser) - Mere nyttig:
' Fremhæver medarbejdere, der tjener over $55.000(beskriver hvad den opnår, hvilket ikke er åbenlyst ved første øjekast)
- Ikke så nyttig:
- Gør det samme for den anden procedure — én sætning, der beskriver, hvad den fremhæver og hvorfor, i forhold til forretningsformålet (IT-afdelingens personale), ikke løkkens mekanik.
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 3).Value = "IT" Then
ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — IT department is highlighted."
End Sub
Indtast begge i modIntro, kør først HighlightTopEarners og bekræft, at præcis to rækker bliver grønne (Emma Davis med $62.000 og Sophia Miller med $59.000 — de tre andre ligger på eller under $55.000), og kør derefter HighlightITDepartment og bekræft, at Sophia Millers række fremhæves i stedet. Gem med Ctrl+S, når begge virker.
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