Skriva Din Första VBA-procedur
Svep för att visa menyn
Att spela in makron lär dig vokabulär; att skriva ett från grunden är där du börjar tänka som en programmerare.
Anatomin av en Sub-procedur
Varje återanvändbar kodblock i VBA som utför en åtgärd (snarare än att returnera ett värde, vilket är en Function) skrivs som en Sub:
Sub ProcedureName()
' instructions go here
End Sub
Med markören någonstans inne i en Sub, tryck på F5 (eller klicka på den gröna Kör-pilen) för att köra den. Kommentarer — varje rad som börjar med en apostrof (') — ignoreras helt av VBA; använd dem generöst för att förklara varför koden gör något, inte bara vad den gör, eftersom vad oftast är uppenbart när man läser koden.
Formateringsvanor som ger omedelbar utdelning
- Skriv
Option Explicitallra högst upp i varje modul — det tvingar dig att deklarera varje variabel, vilket fångar stavfel innan de blir buggar; - Indrag av kod inuti loopar och
If-block med en Tab — VBE kräver inte detta, men oindragen kod blir snabbt oläslig; - Använd beskrivande namn (
HighEarnerCount, intex) — du kommer att tacka dig själv om tre veckor.
Genomgång: Markera höginkomsttagare
Vi skriver, för hand, en procedur som går igenom varje anställd i tabellen och markerar alla som tjänar över $55,000 — något makroinspelaren aldrig kan göra, eftersom det kräver ett beslut (en If-sats) som upprepas för varje rad (en loop).
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— dessa deklarerar två variabler:wskommer att hålla en referens till Employees sheet, ochikommer att räkna igenom raderna;- Set
ws = ThisWorkbook.Worksheets("Employees")— detta är objektmodellens vana: namnge bladet explicit istället för att förlita dig på det som råkar vara aktivt; ws.Cells(ws.Rows.Count, 1).End(xlUp).Row— en standardmetod för att hitta sista använda raden i kolumnA, oavsett hur många anställda som finns i tabellen;For i = 2 To lastRow ... Next i— en loop som upprepar koden en gång för varje datarad, med start på rad 2 för att hoppa över rubriken;- If
ws.Cells(i, 6).Value > 55000 Then— ett beslut: endast rader där kolumnen Salary (kolumn 6) överstiger 55000 formateras; MsgBox— en enkel popup som bekräftar att makrot är klart.
Skriv in denna procedur i modIntro, placera markören inuti och tryck på F5. Kontrollera siffrorna själv — Emma Davis och Olivia Brown är de två anställda som tjänar över $55,000 i exempeltabellen.
Uppgift
- Skriv in
HighlightTopEarnersexakt som det visas i modIntro och kör det. Bekräfta att två rader blir gröna. - Duplicera proceduren som
HighlightITDepartmentoch ändra villkoret så att den markerar alla rader där avdelningen (kolumn 3) är "IT" istället för att kontrollera lön. - Lägg till en kommentar ovanför varje procedur som förklarar, i en mening, vad den gör — öva på att skriva kommentarer för läsaren, inte för dig själv.
- Spara arbetsboken igen (den är fortfarande
.xlsm, så en vanligCtrl+Sräcker).
- Markera hela
HighlightTopEarners-proceduren (frånSubtillEnd Sub), kopiera den och klistra in den direkt under sig själv imodIntro. - Byt namn på den andra kopians
Sub-rad tillSub HighlightITDepartment()— varje procedur i en modul måste ha ett unikt namn, annars vet inte VBA vilken du menar när du försöker köra den. - Villkoret som ska ändras är
If-raden. Just nu kontrollerar den ett tal:
If ws.Cells(i, 6).Value > 55000 Then
Du behöver istället kontrollera text — kolumn 3 (Department) ska vara lika med "IT". Kom ihåg från kapitel 2 att textjämförelser kräver citattecken runt värdet du jämför med, och använd = istället för >.
4. Allt annat inne i loopen (raden med Interior.Color, själva loopstrukturen) kan vara exakt likadant — det är bara villkoret som testas som ändras.
Lägga till kommentarer
- En kommentarrad börjar med en apostrof (
') och står på en egen rad direkt ovanförSub-raden — inte inne i proceduren. - Skriv den som om du förklarar makrot för en kollega som aldrig sett det, inte som en påminnelse till dig själv. Jämför:
- Mindre användbart:
' loops through rows(beskriver hur, vilket koden redan visar) - Mer användbart:
' Highlights employees earning over $55,000(beskriver vad den åstadkommer, vilket inte är uppenbart vid en snabb blick)
- Mindre användbart:
- Gör samma sak för den andra proceduren — en mening som beskriver vad den markerar och varför, utifrån affärssyftet (IT-avdelningens personal), inte loopens 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
Skriv in båda i modIntro, kör först HighlightTopEarners och bekräfta att exakt två rader blir gröna (Emma Davis på $62,000 och Sophia Miller på $59,000 — de övriga tre ligger på eller under $55,000), kör sedan HighlightITDepartment och bekräfta att Sophia Millers rad markeras istället. Spara med Ctrl+S när båda fungerar.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal