Tips og tricks

Undgå at bruge ActiveSheet

I forbindelse med mange af mine kurser og review-opgaver ser jeg ofte, at man bruger ActiveSheet flittigt i sin kode. Det er generelt en dårlig ide, da ActiveSheet jo refererer til det aktive ark, hvilket svarer til det ark, som man sidst har klikket på, og man kan hurtigt komme galt af sted, hvis dette så ikke er det ønskede ark.

Det er langt bedre at bruge explicitte navne ved fx at henvise til navnet på det ønskede ark:


' Henvis explicit til det ønskede ark
ThisWorkBook.Worksheets("Ark1").xxxx

Hvis du sjældne gange alligevel har brug for at arbejde med det aktive ark, skal du sørge for at vælge det først:


' Aktiver et ark med et bestemt navn
ThisWorkBook.Workshees("Ark1").Activate

' Gør noget med det aktive ark
ActiveSheet.xxxx

ActiveWorkbook og ThisWorkbook

På samme måde bør du undgå ActiveWorkbook og igen bruge navnet på projektmappen a la Workbooks(“minmappe.xlsx”). Hvis du vil referere til den projektmappe, der indeholder din makrokode, kan du med fordel bruge ThisWorkbook.

Arkets objektnavn (kodenavn)

En af de store ulemper ved at bruge arknavne i sin kode er, at man jo skal undgå at man selv eller andre omdøber arkene, da koden så ikke længere vil virke. Dette undgår du ved at give arket et beskrivende navn i feltet (name) i egenskabsvinduet – ikke at forveksle med feltet name, der er det navn der vises på arkfanen (at det så er lidt modsat i projektstifindervinduet må vi leve med).

codename

Arket har fået kodenavnet shSales og navnet Salg, hvor sidstnævnte både vises på arkfanen og i parentesen i projektstifinderen, ligesom du selvfølgelig kan referere til det ved hjælp af navnemetoden.


' Aktiver arket ved hjælp af navnemetoden
ThisWorkBook.Workshees("Salg").Activate

' Aktiver arket ved hjælp af kodenavnet
shSales.Activate

Hvis brugeren omdøber arket, så det ikke længere hedder Salg, vil den første del af koden ikke virke, men det vil den nederste!

Erklær evt. et regnearksobjekt

Hvis du har flere regneark og/eller mange henvisninger til det samme regneark, kan du med fordel erklære og anvende Worksheet-objekter.


' Opret regnearksbobjekter 
Dim shRead as Worksheet
Dim shWrite as Worksheet

' Brug regnearksobjekterne til to eksisterende ark
Set shRead = ThisWorkbook.Worksheets("Ark1")
Set shWrite = ThisWorkbook.Worksheets("Ark2")

' Eksempel på kode
shWrite.Range("A1").Value = shRead.Range("A1").Value

Eksempelkoden er noget nemmere at læse end ThisWorkbook.Worksheets(“Ark2”) = ThisWorkbook.Worksheets(“Ark1”), og gør faktisk også koden hurtigere i stedet for mange referencer ved hjælp af samlingen Worksheets (selvfølgelig ikke i dette simple eksempel).

Lær mere

Du kan lære meget mere om makroer i min bog om VBA-programmering i Excel. Bogen fås både som e-bog og som i hardcopy som kursusmateriale.