Scripting i Word og Excel

Med Office-pakkens scriptingsprog VBA er det nemt at manipulere med indholdet i dokumenter og regneark. Det svære er at holde styr på det store antal objekter og metoder, men hjælpefilerne giver god indsigt.

Objekt-modellen

I de sidste par artikler om Visual Basic for Applications, Microsofts scripting-sprog til Office-pakken, har vi set på kontroller, som er brugerfladeelementer i VBA, samt på hjælpefiler og debugging. I denne artikel kigger vi på, hvordan man kan manipulere med de objekter, som programmerne er skabt til: Tekst i Word, og tal og formler i Excel.

Objekt-modellen
Mulighederne for at manipulere med Word og de andre programmer foregår via Offices objektmodel. Og hvad er sådan en størrelse så egentlig? Objekterne i Word kan være synlige objekter, som knapperne i den forrige artikel, eller de kan være bestemte egenskaber i et dokument som for eksempel afsnittene i et Word-dokument. Objekter har to ting, man kan pille ved: Egenskaber, som kan aflæses og sættes, og metoder, som man kan få udført. For at gøre et eller andet i Word eller andre Office-programmer, skal man have fat i det objekt, som indehaver den egenskab man vil læse eller sætte, eller den metode, man vil have udført.

I forrige artikel så vi blandt andet på radioknapper, eller optionbuttons, som de hedder i VBA-terminologien. Knappens tilstand, altså om den er slået til eller fra, er således en egenskab ved knapobjektet. Derfor kan vi slå knappen til med sætningen

OptionButton1.Value = True

Sætningen foroven læses således: "Vi sætter egenskaben Value ved objektet OptionButton1 til sand (true)".

Egenskaber

Undertiden kan et objekts egenskab være et andet objekt, og derfor kan listen af objekter, man skal igennem for at sætte en bestemt egenskab, blive ganske lang. For eksempel kunne man have en sætning, der ser sådan ud:

ActiveDocument.Range.Style = wdStyleHeading1

Her sættes typografien (Style) i en del af teksten i det aktive dokument (Range) til wdStyleHeading1.

Hvis man tænker alle objekterne ind i en træstruktur, kan man således tegne et diagram, hvor alle objekterne indgår. Det er hvad der menes med objekt-modellen.

Herover ses nogle af de objekter, som man har til rådighed i Word. Derudover findes der tilsvarende objekt-hierarkier til de andre programmer i Office, og de objekter, som Visual Basic selv stiller til rådighed som udgangspunkt. Det er objekter til eksempelvis åbning og læsning af filer.

Hjæpen er nær

Her får du hjælp
Hjælpefilerne er gode og informative, og forklaringerne er ikke mere tekniske og indviklede, end at man sagtens kan få en masse ud af dem.

Når man vælger menuen Help i VBA-editoren, ses punktet Microsoft Word Visual Basic Reference. Hvis man skal bruge hjælpefilerne til et af de andre Office-programmer, skal man åbne VBA-editoren fra det program. En anden mulighed er at benytte objekt-browseren i VBA-editoren, således som vi gjorde i forrige artikel.

Da mange objekter kan indgå i flere forskellige sammenhænge, er det ikke lige sådan til at sætte sig ned at tegne det hele op på et stykke papir, men det kan være en god ide at få princippet ind på rygmarven, specielt når man er på udkig efter et objekt, der skal løse et helt specifikt problem.

Data fra Excel

Word og Excel
Lad os til sidst se på et lille eksempel, hvor vi henter data fra et Office-dokument til et andet. Vi vil prøve at programmere en slags primitiv brevfletning, selv om at Word har en indbygget funktion, der kan klare sagen meget bedre. Men det er jo også blot et eksempel.

Vi forestiller os, at vi har en adresseliste i et Excel-ark, og at vi gerne vil indsætte værdier fra regnearket ind på bestemte steder i tekstdokumentet.

Det nemmeste er at afvikle vores script fra Makro-menuen, da alle makroer bygger på VBA.

Åbn Word, og vælg Funktioner > Makro > Makroer. Skriv "MinMakro" i feltet Makronavn for oven, og klik på knappen Opret. Nu åbnes VBA-editoren, og editoren har allerede indsat følgende linier:

Sub MinMakre()
'
' MinMakre Makro
' Makro oprettet 12-09-2001 af Tania Andersen
'

End Sub

Når man gemmer, gemmes scriptet i filen Normal, som indeholder Words globale makroer.

Vi forestiller os, at Word-dokumentet, hvor teksten skal indsætttes, er åbent.

Først skal vi have et Excel-objekt. Det kan lyde lidt mystisk, men vi skal have et eller andet at referere til, og det er lige som alt andet via objekter. Objektet skabes med sætningen

Set ExcelSheet = CreateObject("Excel.Sheet")

Ved at slå op på Open i VBAs hjælpefiler (åbnet fra Excel, vel at mærke), ser vi, at et ark åbnes med Workbooks-objektets Open-metode. Lidt luskeri viser, at Workbooks hører til Application-objektet, som vi kan benytte på vores netop oprettede Excel-objekt.

Alt i alt ser det sådan ud:

ExcelSheet.Application.Workbooks.Open "adresser.xls"

...til Word

Nu vil vi godt kopiere en celle fra Excel-arket, så vi søger på Cell i VBA-hjælpefilerne. Her finder vi egenskaben Cells, som Application-objektet tilbyder. Ved et eksempel ses, at en celle kan sættes eller aflæses ved egenskaben Value. Det ser sådan ud:

ExcelSheet.Application.Cells(1, 1).Value

Til sidst er det blot at indsætte værdien af cellen det rigtige sted i Word-dokumentet. Word-dokumentet kan vi referere til som ActiveDocument, da makroen ligger i Words globale makro-ark.

Der er en lang række måder, hvorpå man kan referere til steder i teksten i et Word-dokument. Her benytter vi Sections, som returnerer de enkelte dele i et dokument, når metoden kaldes med et indeks som parameter.

Sub indsaetTekst()
'
' MinMakre Makro
' Makro oprettet 12-09-2001 af Tania Andersen
'

  Set ExcelSheet = CreateObject("Excel.Sheet")
  ExcelSheet.Application.Workbooks.Open _
  "adresser.xls"
  Navn = ExcelSheet.Application.Cells(1, 1).Value
  ActiveDocument.Sections(1).Range.InsertBefore _
  "Kære " & Navn & "."

End Sub

Eksemplet her er selvfølgelig lidt kortfattet, men forhåbentlig har det demonstreret, at man kan finde alle de objekter, som man har brug for, og komme frem til en løsning, i særdeleshed ved at benytte de mange eksempler, der findes i hjælpefilerne.

Netcompany A/S

IT Consultant

Midtjylland

Politiets Efterretningstjeneste

PET søger specialist med fokus på on-prem Endpoint Management

Københavnsområdet

Forsvarsministeriets Materiel- og Indkøbsstyrelse

IT-supporterelev til Lokal IT på Aalborg Kaserne

Nordjylland

Computerworld Events

Vi samler hvert år mere end 6.000 deltagere på mere end 70 events for it-professionelle.

Ekspertindsigt – Lyt til førende specialister og virksomheder, der deler viden om den nyeste teknologi og de bedste løsninger.
Netværk – Mød beslutningstagere, kolleger og samarbejdspartnere på tværs af brancher.
Praktisk viden – Få konkrete cases, værktøjer og inspiration, som du kan tage direkte med hjem i organisationen.
Aktuelle tendenser – Bliv opdateret på de vigtigste dagsordener inden for cloud, sikkerhed, data, AI og digital forretning.

It-løsninger | København Ø

Automatisering med Copilot & Agentic AI

Høst viden og erfaringer fra andre om, hvordan Copilot og Agentic AI i praksis kan skabe værdi og fleksibilitet i din organisation.

Sikkerhed | Online

Erfaringer fra frontlinjen: Sådan ændrer trusselsbilledet sig

Kort og fokuseret digitalt event: Erfaren frontkæmper fra den digitale sikkerhedsverden giver dig overblik og konkrete anbefalinger til det aktuelle trusselsbillede.

Andre events | Valby

CIO Challenges: Teknologi, transformation og ledelse der flytter forretningen

Hvordan moderniseres en it-platform uden legacy? Hvordan skaber man nye AI‑ og cloud‑drevne forretningsmodeller – uden at miste medarbejdere eller brugere undervejs? På CIO Challenges 2025 får du hands‑on erfaringer fra fire danske CIO’er, der...

Se alle vores events inden for it

Navnenyt fra it-Danmark

Norriq Danmark A/S har pr. 1. september 2025 ansat Hans Christian Thisen som AI Consultant. Han skal især beskæftige sig med at bidrage til udvikling og implementering af AI- og automatiseringsløsninger. Nyt job

Hans Christian Thisen

Norriq Danmark A/S

Industriens Pension har pr. 3. november 2025 ansat Morten Plannthin Lund, 55 år,  som it-driftschef. Han skal især beskæftige sig med it-drift, it-support og samarbejde med outsourcingleverandører. Han kommer fra en stilling som Head of Nordic Operations Center hos Nexi Group. Han er uddannet HD, Business Management på Copenhagen Business School. Han har tidligere beskæftiget sig med kritisk it-infrastruktur og strategiske it-projekter. Nyt job

Morten Plannthin Lund

Industriens Pension

Danske Spil har pr. 1. oktober 2025 ansat Jesper Krogh Heitmann som Brand Manager for Oddset. Han skal især beskæftige sig med at udvikle og drive brandets strategi og sikre en rød tråd på tværs af alle platforme og aktiviteter. Han kommer fra en stilling som Marketing & Communications Manager hos Intellishore. Nyt job

Jesper Krogh Heitmann

Danske Spil