Baggrund

VBA (Visual Basic for Applications) er det programmeringssprog der er indbygget i Microsoft Office og mange andre applikationer fra Microsoft. Selve sproget og værktøjet du arbejder med, er et subset af et større programmeringsværktøj, Visual Studio 6.0.

Visual Studio v6.0, blev frigivet i 1998 og er for lang tid siden blevet udfaset til fordel for Microsofts nye programmeringsplatform: Dot.Net. VB6 er imidlertid stadig den platform, der er integreret i Office pakken - og der er endnu ikke noget der tyder på at det skulle forsvinde.  Så kan man stille sig selv spørgsmålet: Hvorfor er et 20 år gammelt værktøj ikke blevet opgraderet eller skiftet ud i en tid hvor levealderen for IT-værktøjer ikke er særlig lang?

Hvorfor er Excel VBA så populært?

VBA er gennem tiderne blevet anvendt utroligt meget ved automatisering af store økonomimodeller mm. i virksomheder - store som små.

750 millioner anvender Excel VBA

Jeg kan ikke svare på hvordan man er nået til 750 mio. brugere, men det giver et indtryk af et der er vanvittig mange, der anvender Excel! Og Excel er suverænt det Office program, der anvender VBA mest. En søgning på nettet efter VBA-løsninger vil som regel give enormt mange svar - hvoraf hovedparten vil være svar, der vedrører VBA Excel. Fra min egen hverdag som konsulent/udvikler/underviser, kan jeg se at vi afholder måske 20 gange flere kurser i Excel VBA end vi afvikler i Word og Access VBA tilsammen. 

Så kort sagt, så vil der blive et ramaskrig fra brugerne hvis Microsoft forsøger at stoppe for understøttelsen af VBA i Office pakken.

Andre forklaringer kan være:

  • VBA er relativt let at komme i gang med.
  • Du behøver ikke være programmør, og du behøver ikke at anskaffe dig et nyt værktøj for at komme i gang med Excel VBA.
  • Makrooptageren i Excel giver dig en hurtig start og en masse hjælp hvis du vil forsøge dig frem.
  • Excel VBA-løsninger er nemme at distribuere eftersom koden indlejres i selve Excel filen. Modsat løsninger lavet i Dot.Net!

Naturligvis er der også ulemper ved at bygge løsninger med VBA, men eftersom én løsning er at foretrække i én situation, så kan andre situationer måske kræve en anden løsning. Så vægtning af for/imod løsninger vil jeg komme ind på senere.

Excel version og filtype

Eftersom VBA er en meget gammel sag, så er det uden betydning hvilken version af Excel du arbejder med. Ligeledes har sprogversion heller ikke nogen betydning. I VBA foregår det alt sammen på engelsk. Fra Excel 2007 og frem, overgik Excel til et nyt standardfilformat *.xlsx. Dette filformat kan ikke indeholde VBA kode, så når du gemmer dine filer og vil bevare dine makroer, så er det vigtigt at huske at ændre filformatet til *.xlsm.

Optagelse af makroer

For at komme i gang med at optage makroer vil vi normalt først skulle have vist nogle hjælpeværktøjer i ”båndet”. Du skal aktivere fanen ”Udvikler” i Excel indstillingerne. Denne fane indeholder flere grupper med funktionaliteter, som skal anvendes ved optagelse og afspilning af makroer.


Excel VBA optagelse af Macroer
Men inden du starter på at optage makroer, vil det måske være på sin plads at jeg her kommer med en kort forklaring på hvad en makro egentligt er.

En makro er en ”automatiseret sekvens af input til dit program”, eller tænk på det som en sekvens af handlinger, som du udfører i dit program. Sekvensen optages og kan senere afspilles (gentages), når det behøves. Det er derfor meget vigtigt, at du ikke laver ekstra handlinger eller klikker unødvendigt rundt i arket, når du optager makroen.

Har du optaget en makro og den ikke virker efter hensigten, så er det i begyndelsen lettest at optage en ny makro med det samme navn som den første. På den måde overskriver du den gamle makro. At rette i makroen kræver at du begynder at rette i VBA koden og dermed at du til en vis grad skal kunne programmere i sproget VBA.

Ønsker du at lave en makro der udfører mange forskellige handlinger, så vil det som regel være fordelagtigt at lave flere små makroer, der så senere samles til en stor proces. På den måde er det lettere at vedligeholde og rette fejl i den samlede makro.

Inden du starter makrooptageren er det vigtigt at du først har tænkt igennem hvad det er du vil have makroen til at gøre, og det er vigtigt at du sikrer dig at din markør (den aktive celle) befinder sig i den celle du vil have makroen til at starte fra!


Ligeledes er det vigtigt at du har planlagt om makroen skal optages med absolutte cellereferencer eller med relative cellereferencer. Begge metoder har sin anvendelse - men det er vigtigt at bruge den metode, der passer til dine ønsker.

Excel VBA brug af referencer
Forestil dig at ovenstående situation hvor din markør (aktive celle) er den grå celle ”F2”.


Relativ cellereference:
Du optager nu en makro – relativt, hvor din eneste handling er at du trykker [Enter] - hvorved din markør flytter ned til celle ”F3”, altså cellen neden under den grå!
Hvis du flytter din markør til den gule celle ”C2” og nu tester makroens funktion, så vil du se at din markør flytter ned i celle ”C3”, cellen under den gule celle!
Denne makro er relativ og arbejder derfor relativt i forhold til den celle du står i når makroen aktiveres.


Absolut cellereference:
Gentag optagelsen fra før med den forskel at du optager den med absolutte referencer.
Test makroen når din markør står i den gule celle ”C2”.
Du vil nu se at din markør flytter ned i celle ”F3”, cellen under den grå celle!
Denne makro er Absolut og har altså forstået dine handlinger anderledes. Da du stod i celle ”F2” og trykkede [Enter], fortolkede optageren det som om du altid ville springe ned til celle ”F3”.

Aktivering af din makro

I den trinvise proces du går igennem for at optage en makro, er der mulighed for at knytte makroen til en genvejstast for senere hurtig aktivering. Men i de fleste situationer er det fordelagtigt også at kunne aktivere makroen via en knap i brugerfladen.

Excel VBA Aktivering af Macro


Disse løsninger er vældig enkle at lave og fungerer udmærket - hvis det kun er til dig selv du laver makroen!

  • Genvejstaster, der ikke er standard Windows genveje er svære at gætte og huske for andre brugere af filen.
  • Knappen ”Opdater filter” i brugerfladen har den fordel at den følger filen - og dermed kan dine kollegaer let anvende den makro du har lavet. Omvendt, så kan knappen jo kun ses og aktiveres fra det ark den er indsat på.
  • Den brugertilpassede fane ”Peters Makro kursus” er en generel tilpasning af båndet på netop min maskine. Hvis fanen er oprettet via dialogen ”Tilpas båndet” så virker den kun på denne maskine og er vældig følsom for om filer flyttes eller slettes fra maskinen.

Solide professionelle løsninger der manipulerer med båndet, er en besværlig opgave, der kræver en del rutine i VBA for at oprette. (Jeg vil give en intro til det i en kommende blog).

Som et eksempel på at de simple løsninger ikke altid er at foretrække, kan jeg tage eksempelfilen som jeg har anvendt til at lave ovenstående skærmdumps fra. Fanen ”Peters Makro kursus” fungerede særdeles handy da jeg oprettede filen og når jeg arbejder på min private PC og min Office 365 konto.

Nu - på kontoret - åbner jeg igen filen i Excel for at gå videre - og se bare hvordan båndet så ser ud!

Excel VBA  manglende menupunkt
Naturligvis mangler jeg mine fine knapper i båndet - og fanen ”Peters Makro kursus” findes slet ikke. Forhåbentligt viser dette, at de simple lette løsninger er meget begrænsede i deres anvendelse - men selvfølgeligt er der situationer hvor de er fine.

Makro eksempel

Jeg har ofte brug for at formatere tal som ”Mio. Skr” og til det formål har jeg oprettet et brugerdefineret talformat ”#..,0 Mio. Skr ”.

Excel VBA Makro eksempel

Herefter optager jeg en makro hvor jeg anvender det oprettede format. Når jeg opretter makroen, sikrer jeg mig at jeg tildeler den en genvejstast der giver mening for mig. I dette tilfælde har jeg valgt ” Ctrl – Shift – S”. Guiden vil automatisk advare dig hvis du vælger en genvej, der i forvejen anvendes.

Jeg har valgt at gemme makroen i den ”Personlige makroprojektmappe” frem for at gemme i ”Denne projektmappe”. På den måde sikrer jeg mig, at makroen bliver gjort tilgængelig i alle Excel filer - på den PC som jeg arbejder på.

Som alternativ til min genvejstast har jeg også tilføjet en ekstra knap til båndet ”Hurtig adgang”.

Excel VBA værktøjslinjen
Bemærk at i guiden hvor jeg tilføjer knappen til ”Hurtig adgang” vælger jeg at tilføje ”Til alle dokumenter (standard)”. På den måde sikrer jeg at knappen bliver synlig i alle dokumenter i Excel.

Konklusion

Ofte viser det sig at det er de små - men hyppige gentagelser - der sluger mest tid i hverdagens opgaver, og som eksemplet før viser, så er det en relativ let opgave at lave en lille makro, der kan afhjælpe fx et formateringsproblem.

Vi har dog også set at vi står med nogle problematiske sammenhænge mellem hvor vores makro gemmes og hvor vores knapper til aktivering af makroen gemmes. Skal vi finde mere solide løsninger på disse problemer - og skal vi begynde at lave mere komplicerede processer i vores makro - så slipper vi ikke uden om at skulle i gang med at programmere i sproget VBA.

I eksemplet med valutaformatet har Excels makrooptager genereret en lille smule VBA-kode til mig:

Excel VBA simpel kode fra Makro optager

I de næste blogs vil jeg gå dybden med, hvad det er for kode som makrooptageren danner (optager), og hvordan du kan udnytte denne til at komme i gang med at programmere i VBA i Excel.

Vil du igang med Excel VBA nu?

Så vil jeg anbefale dig at deltage på vores:

Excel VBA grundlæggende kursus

Kommende blogs fra mig 

På tegnebrættet til flere blogposts har jeg følgende emner:

• Programmering (ren kode) i VBA
• Dataimport fra databaser
• Tilpasning af båndet
• Addins - tilføjelsesprogrammer
• UDF – brugerdefinerede funktioner
• Enterprise solutions / self-service BI