Skrive Din Første VBA-prosedyre
Sveip for å vise menyen
Å spille inn makroer lærer deg vokabularet; å skrive en fra bunnen av er der du begynner å tenke som en programmerer.
Oppbygningen av en Sub-prosedyre
Hver gjenbrukbar blokk med VBA-kode som utfører en handling (i motsetning til å returnere en verdi, som en Function) skrives som en Sub:
Sub ProcedureName()
' instructions go here
End Sub
Med markøren hvor som helst inne i en Sub, trykk F5 (eller klikk på den grønne Kjør-pilen) for å kjøre den. Kommentarer — enhver linje som starter med en apostrof (') — ignoreres fullstendig av VBA; bruk dem flittig for å forklare hvorfor koden gjør noe, ikke bare hva den gjør, siden hva som skjer vanligvis er åpenbart ved å lese koden selv.
Formateringsvaner som gir umiddelbar gevinst
- Skriv
Option Explicithelt øverst i hver modul — det tvinger deg til å deklarere hver variabel, noe som fanger opp skrivefeil før de blir til feil; - Indenter kode inne i løkker og
If-blokker med én Tab — VBE tvinger deg ikke til dette, men uinnrykket kode blir raskt uleselig; - Bruk beskrivende navn (
HighEarnerCount, ikkex) — du vil takke deg selv om tre uker.
Gjennomgangseksempel: Utheving av høytlønnede
La oss skrive, for hånd, en prosedyre som går gjennom hver ansatt i tabellen og uthever alle som tjener over $55,000 — noe makroopptakeren aldri kunne gjort, fordi det krever en avgjørelse (en If-setning) gjentatt for hver rad (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 deklarerer to variabler:wsskal holde en referanse til Employees sheet, ogiskal telle gjennom radene;- Set
ws = ThisWorkbook.Worksheets("Employees")— dette er objektmodell-vanen: navngi arket eksplisitt i stedet for å stole på det som tilfeldigvis er aktivt; ws.Cells(ws.Rows.Count, 1).End(xlUp).Row— et standarduttrykk som finner siste brukte rad i kolonneA, uansett hvor mange ansatte det er i tabellen;For i = 2 To lastRow ... Next i— en løkke som gjentar koden én gang for hver datarad, og starter på rad 2 for å hoppe over overskriften;- If
ws.Cells(i, 6).Value > 55000 Then— en avgjørelse: bare rader hvor Salary-kolonnen (kolonne 6) overstiger 55000 blir formatert; MsgBox— et enkelt popup-vindu som bekrefter at makroen er ferdig.
Skriv inn denne prosedyren i modIntro, plasser markøren inni den, og trykk F5. Sjekk tallene selv — Emma Davis og Olivia Brown er de to ansatte som tjener over $55,000 i eksempel-tabellen.
Oppgave
- Skriv inn
HighlightTopEarnersnøyaktig som vist i modIntro og kjør den. Bekreft at to rader blir grønne. - Dupliser prosedyren som
HighlightITDepartment, og endre betingelsen slik at den markerer alle rader hvor Avdeling (kolonne 3) er lik "IT" i stedet for å sjekke Lønn. - Legg til en kommentar over hver prosedyre som forklarer med én setning hva den gjør — øv på å skrive kommentarer for leseren, ikke for deg selv.
- Lagre arbeidsboken igjen (den er fortsatt
.xlsm, så vanligCtrl+Ser tilstrekkelig).
- Marker hele
HighlightTopEarners-prosedyren (fraSubtilEnd Sub), kopier den, og lim den rett under seg selv imodIntro. - Gi den andre kopien nytt navn på
Sub-linjen tilSub HighlightITDepartment()— hver prosedyre i et modul må ha unikt navn, ellers vet ikke VBA hvilken du mener når du prøver å kjøre den. - Betingelsen som skal endres er
If-linjen. Nå sjekker den et tall:
If ws.Cells(i, 6).Value > 55000 Then
Du må få den til å sjekke tekst i stedet — kolonne 3 (Avdeling) er lik "IT". Husk fra kapittel 2 at tekstsammenligninger må ha anførselstegn rundt verdien du sammenligner med, og bruk = i stedet for >.
4. Alt annet inne i løkken (linjen med Interior.Color, selve løkkestrukturen) kan være uendret — kun betingelsen som testes skal endres.
Legge til kommentarer
- En kommentarlinje starter med en apostrof (
') og står på egen linje rett overSub-linjen — ikke inne i prosedyren. - Skriv den som om du forklarer makroen til en kollega som aldri har sett den før, ikke som en påminnelse til deg selv. Sammenlign:
- Ikke så nyttig:
' går gjennom rader(beskriver hvordan, noe koden allerede viser) - Mer nyttig:
' Marker ansatte som tjener over $55,000(beskriver hva den oppnår, som ikke er åpenbart ved første øyekast)
- Ikke så nyttig:
- Gjør det samme for den andre prosedyren — én setning som beskriver hva den markerer og hvorfor, med forretningsformål (IT-avdelingens ansatte), ikke løkkens mekanikk.
' 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
Skriv inn begge i modIntro, kjør først HighlightTopEarners og bekreft at nøyaktig to rader blir grønne (Emma Davis med $62,000 og Sophia Miller med $59,000 — de tre andre ligger på eller under $55,000), deretter kjør HighlightITDepartment og bekreft at Sophia Millers rad blir markert i stedet. Lagre med Ctrl+S når begge fungerer.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår