Generelt om makroer

Til og med Excel version 4.0 var makroer en simpel seire af handlinger, der blev skrevet under hinanden i et særligt makroark, som derefter blev afviklet i præcis den rækkefølge, de stod. Denne måde at lave makroer på, støttes fortsat i Excel 2003, men er stort set ikke anvendt mere. Også Access har fortsat støtte for en gammeldags type makroark.

Fra Excel version 5.0 blev det så muligt at lave langt mere avanceret makroer, da programmeringssproget "Visual Basic for Applications" blev introduceret for første gang. I dag er dette sprog det gængse makroprogrammeringssprog i hele officepakken. Sproget er langt stærkere end de gamle makroark, fordi det nu er muligt at lave struktureret programmering med løkker, betingelser, brugerdialoger og meget andet.

Visual Basic for Applications (VBA) er udviklet på grundlag af Microsofts Programmeringssprog Visual Basic (VB). Nogle mener at sproget er en begrænset del af Visual Basic, og det kan man egentlig også godt hævde, da der er elementer i VB, som ikke findes i VBA. På den anden side er der ting i VBA, som ikke eksisterer i VB, så omvendt kan man også sige, at det er en udvidelse til VB.

A'et i "VBA" står for Applications, og indikerer, at sproget hører til applikationer. Og det gør det. I VB kan man lave selvstændige .exe filer (altså selvstændige programmer). Programmer, skrevet i VBA, kan kun køre inde i de programmer, de er skrevet i, fx Excel. Man kan altså ikke umiddelbart konvertere en Excel makro til et selvstændigt program, der virker uden for Excel.

Excel har indbygget en makrooptager. Denne kan bruges til at registrere de handlinger, man foretager sig. Senere kan makroen så afspilles, hvorefter de samme handlinger gentages. Eller rettere sagt, resultatet af de pågældende handlinger reproduceres. Makrooptageren kan være en god hjælp til at forstå, hvor Excel VBA udfører forskellige ting. Desværre kan man ikke optage komplicerede makroer med styrede forløb, fx i form af løkker. I sin natur minder den mere om de gamle makroark, men der produceres VBA kode i stedet. Under nogle omstædnigheder er det ikke den mest effektive og hensigtsæssige kode, der genereres, men den vil løse opgaven.

Nedenstående er en optaget makro. Den laver teksten i den aktuelle celle FED, flytter en celle til højre. Skriver "Ole" i cellen. Laver teksten kursiv og flytter tilbage til den første celle.


Sub Makro1()
'
' Makro1 Makro
' Makro indspillet 14-11-2008 af Jan Kronsell
'
'
'
    Selection.Font.Bold = True
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "Ole"
    Selection.Font.Italic = True
    ActiveCell.Offset(0, -1).Range("A1").Select
End Sub

Som alle andre indspillede makroer indledes makroen med Sub... og afsluttes med End Sub.
De første linjer, der indledes med ' er kommentarer. Mere om den i et andet afsnit. Linjen, der starter med Selection, gør den aktuelle celle FED. De næste tre linjer skifter en celle til højre, skriver "Ole" i denne celle og gør cellen kursiv. Den sidste linje skifter tilbage tril den første celle.

I virkeligheden havde denne kode været mere effektiv:

Sub Makro2()
    ActiveCell.Font.Bold = True
    With ActiveCell.Offset(0, 1)
        .FormulaR1C1 = "Ole"
        .Font.Italic = True
    End With
End Sub

Denne kan man dog ikke indspille. Når den er mere effektiv er det primært fordi, markøren ikke flyttes, men forbliver i den aktuelle celle, mens den anden celle udformes på grundlag af dennes placering.

I de kommende artikler, vil jeg gå mere i detaljer med forskellige sider af Excels makroer.

- Tilbage til Programmering -
- Tilbage til makroer -
- Tilbage til Excel -