Microsoft Excel XP - Makroer med VBA



Relaterede dokumenter
Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13

Hent filoplysninger fra billeder og filer

Skifte til Excel 2010

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl:

Åbn Paint, som er et lille tegne- og billedbehandlingsprogram der findes under Programmer i mappen Tilbehør. Åbn også Word.

Orddeling. Automatisk orddeling. Manuel orddeling. Word thoremil.dk. Vælg fanebladet [Sidelayout] Vælg [Orddeling] Markér Automatisk orddeling

Advanced Word Template Brugermanual

Huskesedler. Design og automatisering af regneark. Microsoft Excel 2013

Avanceret Excel Martin Simon. Forlaget TextMaster ISBN: E-bogsudgave Kopiering fra denne bog er ikke tilladt.

Skifte til PowerPoint 2010

Opret en Powerpoint præsentation automatisk med VBA

How to do in rows and columns 8

Tilpas: Hurtig adgang

Microsoft. fra Word 2003

Pivottabeller, diagrammer og databehandling. Underviser: Nina Kirkegaard Schou Mobil

Genvejstaster til Windows

Udforske kommandoer på båndet De enkelte faner på båndet indeholder grupper, og hver gruppe indeholder et sæt relaterede kommandoer.

Sådan starter du PowerPoint vha. Start-knappen

OFFICEUNIVERSET.DK. ^ + SKIFT + ; (semikolon) Formellinje - skift mellem udvid og fold CTRL + SKIFT + U

ViKoSys. Virksomheds Kontakt System

Skifte til OneNote 2010

Billedvideo med Photo Story

INDHOLDSFORTEGNELSE. INDLEDNING... Indledning. KAPITEL ET... Kom videre med Excel. KAPITEL TO Referencer og navne

Kursusbeskrivelse Microsoft Excel Grundkursus

Word-1: Tag fat på Microsoft Word (XP)

Gem dine dokumenter i BON s Content Management System (CMS)

En lille vejledning til lærere og elever i at bruge matematikprogrammet WordMat (begynderniveau)

Huskesedler. Fletning af dokumenter til masseproduktion

Genveje i Excel. Herunder ser du en liste over nyttige genveje i Excel, skimt den igennem og se hvilke der er vigtigst for dig.

Kapitel 8 Tilpasning af OpenOffice.org:

Indlæsning af licensfil og oprettelse af regnskab

Genvejstaster til Windows

portal.microsoftonline.com

Genveje. Åben undermenuen til højre for menupunktet. Marker menupunktet under det markerede. Udfør menupunktets handling Alt Tast Åben menu Alt Tast

EXCEL 2010 KURSUSHÆFTE TRIN 1 EXCEL 2010 KURSUSHÆFTE TRIN 1

Start Excel Du skal starte med at åbne Excel. I Excel åbner du herefter en tom projektmappe.

Huskesedler. Microsoft Excel 2010

Windows Vista 1. Side 1 af 10

Oktober Dokumentpakker

Kapitel 4 Løkker i C#

Huskesedler rapportskrivning Grundforløb

Modul 2 - Computerens drev og tekstbehandling. Computerens netværksdrev og mappen dokumenter

Skifte til Outlook 2010

Arbejd videre med statistik

Annemette Søgaard Hansen/

Vistemmernu. Et webbaseret værktøj udviklet af Programdatateket i Skive. programdatateket@viauc.dk Web:

MS Visual Studio Basic En kort vejledning

Filer og Mapper. Filer. Mapper

Skifte til Access 2010

SÅDAN BRUGER DU REGNEARK INTRODUKTION

Installation Windows 7

Manual til Dynamicweb Februar 2010

Sådan opretter du en elektronisk aflevering

Skrifttype og størrelse

Brugervejledning til Avery Wizard for Microsoft Office. Dansk version til -

WEB-DIRECT Brugerguide Eksportfunktion i WEB-DIRECT

5.0 Velkommen til manualen for kanalen HTML-grab Introduktion til kanalen HTML-grab kanalside Hvad er et spot?

Sådan gør du Microsoft Excel 2013

Indhold. Jennie Mathiasen. Google Drev

VUC IT Niveau G. Drev Mapper Filer

Startvejledning. Microsoft PowerPoint 2013 ser anderledes ud end tidligere versioner, så vi lavet denne guide for at gøre din læreproces nemmere.

Bogfunktionen eller Slægtsbogen i FTM

Åben Power Point... Side 2. Ny præsentation... Side 2. Dias layout... Side 2. Temaer... Side 3. Gem dit eget tema... Side 3. Diasmaster...

Microsoft PowerPoint 2010

Huskesedler. Præsentation af tal i regneark. Microsoft Excel 2010

JØRGEN KOCH Excel 2013 for alle

Kom i gang med... Kapitel 12 Arbejde med skabeloner. OpenOffice.org

Vejledning til udskrivning af etiketter/labels og konvolutter i Blåt Medlem

Easy Guide i GallupPC

Sådan gør du Microsoft Word 2013

Daglig brug af JitBesked 2.0

Styresystemet er den del af softwaren, der sammenkæder hardware og brugerprogrammer, således at de kan arbejde sammen.

Stifinder er et program til navigere rundt med i dine mapper (biblioteker) på din computers Harddisk.

Genveje til Excel på MAC

Sæt altid USB stikket i computeren, før du installerer softwaren. (Gælder ikke i XP) Tilslut USB adapteren til en ledig USB port på din computer

GIS indlæsning af kreditorer og betalingsform. Brugervejledning 1.0

Opstart. I gang med Dreamweaver. Læs mere om...

Kapitel 3 Betinget logik i C#

Indledning. På de følgende sider vises, primært i tegneserieform, lidt om mulighederne i PC-AXIS for Windows.

Google Apps. Lær at oprette, organisere, dele og slette dokumenter. Udarbejdet af PLC, version 2013!!!!!!! Side 1 af 9

Brugermanual. Outlook Web Access for Exchange Server 2003 (OWA 2003) Udarbejdet af IT-afdelingen 2006

SPAM-mails. ERFA & Søren Noah s A4-Ark Køber varer via spam-mails. Læser spam-mails. Modtager over 40 spam-mails pr. dag. Modtager spam hver dag

Heldigvis har systemet indbygget en hjælp, som man kan benytte, hvis denne vejledning ikke berører det opståede problem.

Sikkerhedskopiering. Sikkerhedskopiering til harddisk.

Opstart. I gang med Dreamweaver. Læs mere om... Generelle bemærkninger. Hvilken skærmopløsning? OBS

Brug af Word til matematik

Peter Kragh Hansen. Microsoft Outlook 2013 DK. ISBN nr

Excel-1: kom godt i gang!!

Søren Christiansen

Undervisning Version 1.0 redigering af billeder til hjemmesiden

HJÆLP TIL IGANGSÆTNING AF WINKOMPAS 3

Manual til hjemmeside i Typo3

Vejledning. Excel-skabelon. til oprettelse af kalendere. Oversigtskalender_Skabelon_Revideret 05_06.xls

AluData: Regneark og brevfletning i LibreOffice. AluData: Regneark og brevfletning i LibreOffice

Indhold. Selandia-CEU Side 2

Et oplæg med PowerPoint bliver til.

Transkript:

Microsoft Excel XP - Makroer med VBA

Microsoft Excel XP - Makroer med VBA Microsoft Excel XP - Makroer med VBA til Windows 9x / Windows NT / Windows 2000 / Windows XP. Version: 2002 Copyright 2003 by F.M.T. F.M.T. Rymarksvej 79 2900 Hellerup Telefon: 70 20 31 40 Telefax: 39 27 16 61 E-mail: morley@morley.dk WEB-sted:www.morley.dk Materialet er udarbejdet af F.M.T. ved brug af Word 2002. F.M.T. er registreret som Microsoft Certified Professional (MCP), hvilket dokumenterer vores produktkendskab. Skærmbilleder er "fanget" med SnagtIt 6.1. Layout og grafisk tilrettelæggelse af F.M.T. Materialet er udskrevet på en Postscript Laserprinter i 1200 DPI. Enhver form for automatisk/manuel hel eller delvis gengivelse eller mangfoldiggørelse af dette materiale, uden skriftlig samtykke fra F.M.T., er forbudt efter gældende lov om ophavsret. 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA Konventioner anvendt i dette materiale [F1] Tast på funktionstasten F1. [Alt]+[Ctrl] Hold tasterne Alt og Ctrl nede på samme tid. [Alt]+[Ctrl]+[m] Hold tasterne Alt og Ctrl nede og tast m. [Dobbeltklik] [Højreklik] Redigér/Klip ENTER HOME [Alt]+[R]+[K] Dobbeltklik med venstre musetast. Klik med højre musetast. Aktivér menuen Redigér og derefter undermenuen Klip. Tast linjeskift (Enter-tasten bør ikke bruges). Tast Home. Kombinationstaster - aktiverer typisk en menu. Når du ser symbolet for en hånd, skal du være aktiv vises kun i øvelserne. Navigeringstaster - anvendes til at flytte/navigere rundt i et dokument. Excel XP VBA.doc Ver. 2 2003 F.M.T.

Microsoft Excel XP - Makroer med VBA 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA Indholdsfortegnelse Indholdsfortegnelse 1. Indledning... 11 2. Kursets indhold... 13 Øvelserne til kurset... 13 Fuld installation af Microsoft Excel XP... 14 3. Definition af makroer... 15 Hvornår skal man bruge en makro... 15 Forbered en makro... 16 Hvem skal konstruere makroer... 17 Forudsætninger for at anvende makroer... 17 Hvad nu hvis?... 17 Gem makroen!... 18 Dokumentation af makroer... 18 Begrænsninger i makroer... 18 Anvend den elektroniske hjælpefunktion... 19 Andre hjælpemidler... 19 4. Hvorfor anvende makroer?... 21 Hvorledes anvendes Excel?... 22 5. Programmering... 23 Forudsætning for at programmere... 23 Objekt programmering... 23 Egenskaber, Metoder og Hændelser... 24 Objektoversigten... 25 Biblioteker og projekter (Libraries)... 25 Klasser (Classes)... 26 Medlemmer af klassen (Members)... 26 Excel XP VBA.doc Ver. 2 2003 F.M.T.

UIndledning Microsoft Excel XP - Makroer med VBA 6. Oprettelse af makroer... 27 Makroens forskellige elementer... 27 Makroer kan kategoriseres... 28 Automatisering... 28 Program... 28 Applikation... 28 Makroer prioriteres således... 29 Hvor skal makroer gemmes?... 29 Den aktive projektmappe:... 30 En ny projektmappe:... 30 Den personlige makroprojektmappe:... 31 7. Visual Basic arbejdsvinduet... 33 Programkodevinduet... 33 Egenskabsvinduet... 34 Projektvinduet... 34 Værktøjslinjerne i VBA vinduet... 35 8. Visual Basic og VBA... 39 Visual Basic 6.0 eller Visual Basic NET 7.0... 39 Visual Basic for Applications... 39 Procedurer... 40 Sub Procedure... 40 Function Procedure... 40 Property Procedure... 41 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA Indholdsfortegnelse 9. Sproget i Visual Basic... 43 Teknisk definition... 43 Controls... 43 Hændelse (Events)... 44 Metode (Methods)... 44 Objekt (Object)... 44 Procedure (Procedures)... 44 Egenskab (Properties)... 45 Projekt (Project)... 45 Excel objekter... 46 Referencer til objekter... 50 Objekter i samlinger... 50 Enkeltstående objekter... 50 Egenskaber og metoder for en samling... 51 Eksempler på egenskaber i Excel... 51 Eksempler på metoder i Excel... 52 Egenskaber og metoder... 52 10. Variabler... 55 Erklæring af variabler... 55 Objektvariabler... 58 Variables levetid... 59 Nøgleord... 60 Dim... 60 Private... 60 Static... 60 Public... 61 Eksempel på brug af en Lokal og Static variabel... 61 Fejlvenlig kode... 62 Sådan tvinges bestemt typeerklæring... 62 Typeerklæringstegn... 63 Ubestemt erklæring af variabel... 63 Bestemt erklæring af variabel... 64 Excel XP VBA.doc Ver. 2 2003 F.M.T.

UIndledning Microsoft Excel XP - Makroer med VBA Indstillingen eksplicit skrives således:... 65 Tilføje data til en variabel... 65 11. Betingelser og løkker... 67 Betingelser... 67 Hvad er en betingelse... 67 If Then Else betingelse... 67 If Then ElseIf betingelse... 69 And og Or... 69 Select Case... 70 Løkker... 71 For Next... 71 For Each Next... 71 Do Loop... 72 While Wend... 73 Gentagelse af sætninger mens en betingelse er sand... 73 12. Dokumentation af makroer... 75 13. Arbejde med tekst... 77 ANSI-tegnsæt... 77 ASCII-tegnsæt... 77 Arbejde med tekst i Excel... 78 Funktion til beregning af alder... 80 Funktion til beregning af Køn... 81 Finde et filnavn ud fra søgesti og filnavn... 81 Instr()... 82 Mid()... 82 Len()... 82 InstrRev()... 82 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA Indholdsfortegnelse 14. Matricer (Arrays)... 83 Index... 83 Arrays i 2 dimensioner... 84 Definition af Type... 84 Hente en matrice fra en ekstern tekstfil... 88 Funktionen Input... 89 Indsæt eller tilføj tekst i en fil... 91 Tilstand Write... 91 Tilstand Append... 91 15. Sub-rutiner og brugerdefinerede funktioner... 93 Sub-rutiner... 93 Kald af Sub-procedurer med mere end ét argument... 93 Brugerdefinerede funktioner... 94 Brug af parenteser ved kald af funktioner... 95 Overførsel af navngivne argumenter... 95 Kald af en procedure med samme navn... 96 16. Regnefunktioner... 97 Hvorfor skal man oprette sine egne regnefunktioner?... 97 En funktion uden argumenter... 97 En funktioner med et argument... 98 En funktion med to argumenter... 99 En funktion med et område som argument... 100 En funktion med valgfri argument... 101 17. I gang med VBA... 103 Navngivning af makroer... 103 Sådan indspilles en makro... 103 Indspilning med relativ cellereference... 108 Afspil en makro... 109 Tilføj en makro til værktøjslinjen... 109 Sådan virker makroindspilningen... 112 Sådan gøres makroen hurtigere... 114 Deaktivér skærmopdateringer... 115 Excel XP VBA.doc Ver. 2 2003 F.M.T.

UIndledning Microsoft Excel XP - Makroer med VBA 18. Manuel konstruktion af makroer... 117 Aktivering af specifik fane i et regneark... 117 Sumformel for areal... 117 Absolut cellereference... 117 Relativ cellereference... 117 Marker en hel kolonne... 118 Indsæt søgesti i sidefod... 118 Udføre en handling på flere celler med en løkke... 119 Udvide Excels funktionalitet... 119 Slette formler i et ark... 121 Slet formler i område... 121 Anmod bruger om en værdi... 122 Indsæt en værdi fra en InputBox i regnearket... 123 Inputbox... 124 InputBox Function... 124 InputBox Method... 124 Vis besked i Statuslinjen... 125 Vis besked på skærmen... 125 Meddelelsesboks med flere knapper... 126 Udfør handling når Excel startes... 126 ThisWorkbook... 129 Objektet ThisWorkbook... 129 Oprette kode i ThisWorkbook... 130 Egenskaben ThisWorkbook... 131 Erklære flere variabel... 132 Skrive kode som ikke kan vises på én linje... 132 19. Excel dialogbokse... 133 Brug af samlingen Dialogs... 134 Hvad hedder den indbyggede dialogboks... 135 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA Indholdsfortegnelse 20. Opret Userforms... 137 Sådan oprettes en UserForm... 137 Sådan omdøbes en UserForm... 137 Sådan indsættes et kontrolelement... 138 Sådan flyttes et kontrolelement... 139 Sådan ændres størrelsen på elementet eller formularen... 140 Sådan aktiveres en UserForm... 140 Sådan aflæses værdier fra en UserForm... 141 Sæt egenskaber for en UserForm... 146 21. En simpel skabelon... 147 22. Fejlfinding... 155 Sådan tester du et udtryk... 155 Breakpoints... 160 23. Oprette egne værktøjslinjer... 163 FaceID... 166 OnAction... 166 Excel XP VBA.doc Ver. 2 2003 F.M.T.

UIndledning Microsoft Excel XP - Makroer med VBA Øvelse 1... 169 Øvelse 2... 173 Øvelse 3... 175 Øvelse 4... 179 Øvelse 5... 183 Øvelse 6... 187 Øvelse 7... 189 Øvelse 8... 191 Øvelse 9... 193 Øvelse 10... 195 Øvelse 11... 197 Øvelse 12... 199 Øvelse 13... 201 Øvelse 14... 207 Øvelse 15... 209 Øvelse 16... 215 Øvelse 17... 219 Ekstraøvelse 1... 221 Ekstraøvelse 2... 225 Ekstraøvelse 3... 227 Ekstraøvelse 4... 231 Ekstraøvelse 5... 233 Indeks... 235 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UIndledning 1. Indledning Vi byder dig velkommen på kursus i Makroer med VBA programmering i Excel 2002. Kurset har til formål at gøre dig fortrolig med programmering under Excel, således at du på en let og nem måde kan udføre de rutiner, som dit arbejde kræver. Forudsætninger For at kunne opnå det optimale udbytte af denne undervisning forudsættes det, at du kender de grundlæggende begreber omkring anvendelsen af en PC, samt at du er fortrolig i anvendelsen af Windows brugerfladen, det vil sige Windows 9x eller Windows XP. Der kræves kendskab til programmet, på niveau med videregående kursus i Microsoft Excel 97, Excel 2000 eller Excel XP. Kursushåndbogen Formålet med denne kursushåndbog er dels at understøtte undervisningen på kurset, dels at give dig mulighed for repetition af kursets indhold og endelig at skabe et arbejdsredskab, som du kan bruge i det daglige arbejde. Kursusbogen kan, med dine egne notater, blive dit vigtigste opslagsværk, mens du er nybegynder. Kursushåndbogen er ikke en erstatning for den manual som medfølger programmet. Efter kursus Når du kommer hjem fra kurset, er det anbefalelsesværdigt at sætte tid af til opfølgning. Det forøger udbyttet af kurset. Gå ikke i gang med større opgaver end du magter. Konsultativ undervisning Skulle du have brug for assistance til f.eks. løsning af større opgaver eller måske konsulentbistand i en opstartsfase, står vores konsulentgruppe til rådighed. Vi kan hjælpe indenfor alle områder vedrørende brugen af standard Pc-programmer, og bidrager gerne med vor ekspertise på et vilkårligt tidspunkt i et projektforløb. Er vi med fra starten, får du naturligvis det største udbytte. Excel XP VBA.doc Ver. 2 2003 F.M.T. 11

U Kursets indhold Microsoft Excel XP - Makroer med VBA 2. 12 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA U Kursets indhold Kursets indhold Dette undervisningsmateriale omfatter følgende områder omkring anvendelsen af Excel. Definition af makroer Hvorfor anvende makroer? Programmering Oprettelse af makroer Visual Basic arbejdsvinduet Visual Basic og VBA Sproget i Visual Basic Variabler I gang med VBA Manuel konstruktion af makroer Betingelser og løkker Dokumentation af makroer Arbejde med tekst Matricer (Arrays) Sub-rutiner og brugerdefinerede funktioner Regnefunktioner Excel dialogbokse Opret Userforms En simpel skabelon Fejlfinding Det anbefales, at du skimmer materialet igennem sammen med instruktøren. Materialet er opbygget med en teoretisk del og en øvelsesdel. Øvelserne til kurset Alle øvelserne viser undervejs en forklaring til de handlinger og skærmbilleder, du opretter. Det anbefales kraftigt, at du læser øvelsen, inden du løser den, så du har et indtryk af, hvad du skal frem til. Excel XP VBA.doc Ver. 2 2003 F.M.T. 13

U Kursets indhold Microsoft Excel XP - Makroer med VBA Der er flere øvelser i materialet, end du kan nå på et 2 dages kursus. Dette skyldes, at der kan være kursister, som tidligere har arbejdet med programmering i Visual Basic. Udfør de øvelser du kan nå og løs eventuelt de manglende øvelser, når du får tid. Jo hurtigere du kaster dig ud i øvelserne, jo hurtigere lærer du Excel at kende, gennem learning by doing. Fuld installation af Microsoft Excel XP Du skal have en fuld installation af Microsoft Excel XP, før du kan opnå det fulde udbytte af dette kursus. I modsat fald vil du ikke have adgang til programmeringsværktøjerne eller hjælpefilen til VBA. 14 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UDefinition af makroer 3. Definition af makroer En makro består af en række handlinger (kommandoer), som udføres, når du afspiller makroen. Makroer oprettes typisk til at gentage ofte anvendte handlinger ved hjælp af klik med musen, ved en genvejstast eller fra menuen. Herunder følger nogle eksempler på makroer, du kan oprette: En makro, som aktivérer stavekontrollen, når du udskriver dokumentet. Først startes stavekontrollen, derefter udskrives dokumentet. En makro, som tæller antallet af sider i et dokument, og derefter indsætter dette sidetal + 1 i en telefaxforside. En ændret udgave af menuen Filer/Åbn, som automatisk skifter til biblioteket C:\MINE REGNEARK, når dialogboksen Filer Åbn vises. Det er nemt at oprette makroer med indspilningsfunktionen i Excel. Når du starter indspilningen, indspilles alle de handlinger, du udfører i Excel. Handlingerne gemmes i en makro, så de senere kan afspilles. Mere avancerede makroer kan oprettes i Excel med makroprogrammeringssproget Visual Basic for Applications, herefter benævnt VBA. Du kan gøre dine makroer globale, du kan gemme dem i dit dokument, eller du kan vælge at gemme dem i skabeloner. Makroer kan tildeles en tastekombination, indsættes i værktøjslinjen eller indsættes som et menupunkt, så de bliver nemme at anvende. Hvornår skal man bruge en makro En makro bør anvendes, når en arbejdsrutine udføres eller skal udføres flere gange. Dette kompendium viser forskellige eksempler på makroer. Disse makroer kan enten anvendes efter de viste eksempler eller give inspiration til nye idéer. Excel XP VBA.doc Ver. 2 2003 F.M.T. 15

UDefinition af makroer Microsoft Excel XP - Makroer med VBA Forbered en makro Konstruer dine makroer så de kan forstås af andre. Indsæt så vidt muligt en kommentar eller beskrivelse om de enkelte instruktioner. Dermed bliver det lettere, ikke kun for dig men også for andre, på et senere tidspunkt at tilføje nye instruktioner eller eventuelt at redigere instruktionerne i makroen. Undgå lange makroinstruktioner, derved bliver makroen hurtigere at afvikle. Anvend sub-rutiner frem for at henvise til andre makroer. Vær opmærksom på at konstruktion af makroer kan tage længere tid end forventet. Afsæt tid til makroprogrammeringen og sørg for at starte på et tidspunkt, hvor du ikke bliver forstyrret. Konstruktion af makroer består af flere niveauer, nemlig: Skitsering af problemstilling. Mulige løsninger. Konstruktion af makroen. Afspilning af makroen. Fejlrettelse og trinvis afspilning. Tag højde for det uforudsete. Indsæt bemærkninger og kommentarer i makroen. Indsæt makroen i menuen eller på værktøjslinjen. Konstruer en hjælpefil. En perfekt makro er andet og mere end blot at indspille og afspille makroen. Så længe en makro kun anvendes af "konstruktøren", er det op til "konstruktøren" at afgøre, hvor effektiv makroen skal være. Når en makro derimod skal anvendes af andre, er det imidlertid en god idé at skabe et perfekt arbejdsmiljø. Nemlig et miljø, som ikke udsætter brugeren for uforudsete hændelser. 16 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UDefinition af makroer Hvem skal konstruere makroer Det ideelle vil altid være, om alle kan konstruere deres egne makroer. Desværre er dette imidlertid sjældent muligt, blandt andet fordi det ikke er alle, som interesserer sig for programmering, og nogle brugere besidder ikke de fornødne kundskaber til at kunne programmere i VBA. Hvis man i en virksomhed er mange, som anvender Excel, kan det anbefales, at man udvælger én eller to brugere, som skal stå for programmering af makroer. Der findes typisk altid en eller flere brugere, som synes, at programmering er sjovt, sådanne brugere bør tildeles ansvaret for makroprogrammering. Forudsætninger for at anvende makroer Den eneste forudsætning, som kræves for at kunne anvende makroer opbygget i Excel, er, at man er rimelig fortrolig med programmets standardfunktioner. Tip! Makroer består i princippet af en række handlinger, som svarer til de indbyggede funktioner i Excel. Disse Excel-funktioner udløses imidlertid ikke på den traditionelle måde, med dialogbokse og lignende, men af de tilsvarende VBA-handlinger. Et grundigt kendskab til Excel giver en bedre forståelse for den programmering, som finder sted ved hjælp af VBA. Det ses ofte, at brugere konstruerer lange og komplekse makroer, hvor den ønskede handling kunne være udført ved en enkelt Excelkommando. Hvad nu hvis? "Hvad nu hvis" situationer kan lige såvel opstå under en makroafspilning som under "normal" anvendelse af Excel. NB! Når du programmerer en makro, bør du tage højde for "Hvad nu hvis" situationer. En "Hvad nu hvis" situation kan for eksempel være, at du i makroen ubevidst henviser til en fil eller en mappe, som ikke eksisterer på "brugerens" computer. En sådan situation vil vise en fejlmeddelelse på skærmen. Excel XP VBA.doc Ver. 2 2003 F.M.T. 17

UDefinition af makroer Microsoft Excel XP - Makroer med VBA Undgå ligeledes at konstruere makroer, som er hukommelseskrævende (udløser en hukommelseskrævende funktion), fordi den tilgængelige hukommelse ikke er ens på alle computere. En hukommelseskrævende funktion er blandt andet, når man formaterer hele rækker og kolonner i et regneark, til trods for at man kun skal anvende en lille del af regnearket. Gem makroen! Gem makroerne der hvor de skal anvendes. Hvis en makro skal benyttes i alle dokumenter, uanset dokumenttype, bør den gemmes i PERSON.XLS. Hvis en makro kun skal anvendes i en bestemt dokumenttype, bør den gemmes i den pågældende skabelon. Dermed undgår du en unødvendig stor PERSON.XLS. Du kan for eksempel oprette og tilknytte en kørsel-makro, som kun kan anvendes, når du arbejder med kørselsregnskaber. Dokumentation af makroer Hvis du programmerer makroer, som andre skal anvende, bør du dokumentere makroerne. Det er en god idé at udfærdige en kort vejledning i brugen af makroen, og eventuelt hvorledes makroen installeres se kapitlet Dokumentation af makroer på side 75. Begrænsninger i makroer NB! Tip! Når du konstruerer makroer, vil der opstå tilfælde, hvor du støder på visse begrænsninger. Betinget af de funktioner du indsætter i en makro, vil du til tider støde på tilfælde, hvor en makro ikke kan afspilles (testes) i Visual Basic-vinduet. Når sådan en situation opstår, skal du blot oprette et nyt regneark og derefter afspille makroen eller eventuelt placere vinduerne side om side, så du kan følge afspilningen af makroen. 18 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UDefinition af makroer Anvend den elektroniske hjælpefunktion Excel indeholder en elektronisk hjælpefil omkring Visual Basic programmeringssproget. Du kan kopiere makrokoder fra hjælpefilen direkte ind i et kodevindue, hvorefter du kan bygge videre på koden. Hermed opnår du adgang til en lang række færdige eksempler, som ofte kan anvendes efter mindre tilpasninger. Andre hjælpemidler Når du når det stadie, hvor den indbyggede hjælpefunktion ikke længere er tilstrækkelig, kan du supplere din viden fra forskellige amerikanske bøger, som dybtgående beskriver anvendelsen af Visual Basic for Applications, blandt andet Excel XP Macro & VBA Handbook fra forlaget SYBEX og/eller Office XP Visual Basic Programmers Guide fra Microsoft Press. Excel XP VBA.doc Ver. 2 2003 F.M.T. 19

UDefinition af makroer Microsoft Excel XP - Makroer med VBA 20 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UHvorfor anvende makroer? 4. Hvorfor anvende makroer? Hvis du har arbejdet længe med Excel, kender du formentlig til anvendelsen af Typografier. Autokorrektur. Indsæt Funktion. Gå til speciel. Skabeloner. Du kan oprette typografier, så du hurtigt opnår det ønskede layout på dit dokument. Du anvender Autokorrektur, til hurtigt at indsætte hele sætninger eller for løbende at korrigere dokumentet for stavefejl. Du kan anvende Indsæt Funktion til hurtigt at oprette komplekse formler. Du kan anvende Gå til speciel til hurtigt at navigere rundt i dokumentet. Du kan oprette skabeloner som et Skelet til, hvorledes dine dokumenter skal se ud. Du kan med ovennævnte værktøjer udføre en høj grad af automatisering. Måske endda så meget, at du ikke behøver at anvende makroer. Det er unødvendigt at anvende en damptromle til at knække en nød således er det også med Excel. Anvend de værktøjer du har for hånden. De er alle glimrende i deres funktioner og har alle specielle formål, også selvom du endnu ikke har lært dem alle at kende. Når du kender Excel, i programmets fulde udstrækning, kan du i de situationer, hvor du mener, du er stødt på en barriere, begynde at anvende makroer. Excel XP VBA.doc Ver. 2 2003 F.M.T. 21

UHvorfor anvende makroer? Microsoft Excel XP - Makroer med VBA Hvorledes anvendes Excel? Du kan helt basalt anvende Excel som en regnemaskine. Det vil sige, du indtaster en række tal, som du beregner. Cellereferencer og opdateringer af resultater betyder ikke det store for dig. I den modsatte ende af skalaen kan du tilpasse din version af Excel, så du ved et klik med musen opretter det dokument, du ønsker. De fleste brugere anvender Excel et sted midt mellem disse to yderpunkter. De lærer gradvis Excel at kende ved at forske i programmet. Når et værktøj er på plads, begynder de at undersøge mulighederne med det næste værktøj. Efterhånden begynder de at forstå og anvende typografier, analyseværktøjerne og skabeloner. De fleste brugere (næsten 75%) forstår imidlertid ikke den verden af muligheder, som programmering åbner for. I de fleste tilfælde fordi de ikke har tid til at lære at programmere, eller fordi de tror, det er svært. Dette materiale vil vise dig, at det ikke er svært at programmere makroer i Excel. Du vil i materialet se en række forskellige muligheder, som du kan bygge videre på. Det er kun din egen nysgerrighed, som sætter begrænsningen. 22 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UProgrammering 5. Programmering Forudsætning for at programmere For at kunne programmere i VB(A) kræves to forudsætninger 1. Du skal være i stand til at anvende den indbyggede hjælp. 2. Du skal tænke logisk. Logisk tænkning kan beskrives således: For at kunne udføre en opgave, skal du på forhånd vide hvorledes du vil løse opgaven. Programmering foregår efter de samme principper du fortæller programmet hvorledes det skal virke. Er du ikke i stand til at definere de metoder og rutiner du vil anvende, kan du ikke forvente at dit program vil være i stand til at løse opgaven. Kan du eksempelvis fortælle en blind person, hvordan vedkommende kommer fra Rådhuspladsen i København, til Københavns Hovedbanegård. Opgaven er nem at udføre, hvis du selv hjælper vedkommende på vej. Hvis du derimod skal fortælle, hvordan personen på egen hånd kommer frem (uden at blive kørt over, uden af falde osv.) er opgaven vanskeligere. Har du prøvet at vente på dine gæster. Pludselig ringer telefonen, og de fortæller at de står på busholdepladsen i din by, men de kan ikke finde dit hjem? En sådan situation skyldes oftest, at den der har givet instruktionen (programmøren) har overset eller glemt nogle vigtige detaljer. Programmering foregår ved hjælp af logiske instruktioner. Objekt programmering Den almene opfattelse af, hvad et objekt er, er at det kan opfattes med en af de menneskelige sanser oftest kan man røre ved objektet eller se det. Lige så ofte kan man ændre på objektet. Excel XP VBA.doc Ver. 2 2003 F.M.T. 23

UProgrammering Microsoft Excel XP - Makroer med VBA I Edb-programmer kan man ikke røre ved objekterne, men man kan se objekterne. Du kan eksempelvis se et afsnit i Word. Hvis du indsætter tekst, sletter ord eller ændre skriften i afsnittet, så har du foretaget en ændring på det objekt som kaldes for en Paragraph. Det er imidlertid ikke alle elementer i et Edb-program som kan ændres. Maksimer og Minimer knapperne som vises i øverste højre hjørne er objekter men det er ikke objekter som du kan ændre. Du kan ikke gøre dem større eller mindre, eller skifte farve på dem (medmindre du ændre Windows skærmfarver). Når du programmere, kan du ændre et objekt på tre måder: 1. Du kan ændre objektets egenskaber (Properties). 2. Du kan få objektet til at udføre en handling, ved at aktivere en metode (Methods) som er knyttet til objektet. 3. Du kan definere en procedure som udføres når en given hændelse (Events) indtræffer. Egenskaber, Metoder og Hændelser Hvis ovenstående skal omskrives til daglig tale, kan vi associere det med en Computer. Du kan beskrive en Computer som en helhed (et enkeltstående objekt), hvor du typisk vil refererer til prisen, farven, årgangen og så videre eller som en samling af objekter (collection), hvor du typisk beskriver tastatur, skærm, mus, CPU og så videre disse enheder kalder man for computerens egenskaber. Du kan anvende computeren til at skrive breve eller til at beregne budgetter dette er de metoder man forbinder med en computer. Når du starter computeren, så trykker du på Tænd-knappen, hvorefter computeren automatisk begynder at indlæse styresystemet. Denne hændelse sker helt automatisk. De objekter som indgår i samlingen (collection) af din computer, har deres egne egenskaber, metoder og hændelser. Eksempelvis har et CD-ROM drev forskellige egenskaber, blandt andet læsehastigheden og overførselshastigheden. CD-ROM drevet reagerer på metoden Indsæt CD / Udtag CD. 24 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UProgrammering Hvis du indsætter en CD som har en AUTORUN.INF fil, så vil Cd en automatisk blive afspillet det vil sige at hændelsen Play automatisk indtræffer. Objektoversigten Du kan anvende Objektoversigten til at hente hjælp omkring objekter, hændelser, metoder og egenskaber. Objektoversigten åbnes med [F2], fra menuen View/Object browser eller fra værktøjslinjen. Figur 1 Listen All Libraries viser en oversigt over de biblioteker og projekter som er tilgængelige fra det aktive projekt. Du vil ikke se biblio- Biblioteksoversigt Objektklasser Egenskaber Hændelse Metode Beskrivelsevinduet Du kan højreklikke på et objekt og aktivere hjælpen fra genvejsmenuen. Du ser følgende i Objektoversigten: Biblioteker og projekter (Libraries) Excel XP VBA.doc Ver. 2 2003 F.M.T. 25

UProgrammering Microsoft Excel XP - Makroer med VBA teket for MSForms, før du har indsat en UserForm i dit projekt (UserForm1 oprettes som den første formular). Et Bibliotek (Library) er en fil som indeholder alle oplysninger om et objekt. Klasser (Classes) Listen Classes viser de objekter som er knyttet til det valgte Library. Hvis du i listen for Library skifter fra VBA til stdole vil du se at objekterne ændres i listen for Classes. Medlemmer af klassen (Members) Når du aktivere en klasse, eksempelvis Application, vil du i listen over Members se de egenskaber, hændelser og metoder, som er knyttet til den valgte klasse. Hvis en egenskaber viser en lille blå prik, er egenskaben standardværdien for det valgte objekt. Dette kompendium viser i de efterfølgende kapitler, hvorledes du arbejder med objekt-orienteret programmering. 26 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprettelse af makroer 6. Oprettelse af makroer Figur 2 Makroer kan oprettes på to måder: 1. Automatisk (indspilning af handlinger) 2. Manuelt (indtastning af kode) Det anbefales, at du starter en makro med kommandoen Funktioner/Makro/Indspil ny makro. Du kan med indspilningen sikrer dig at din kode bliver korrekt. Makroens forskellige elementer En makro består af en begyndelse, en instruktion og en slutning. Figur 2 viser kodevinduet, som anvendes til lagring af makrokoder. Makroens begyndelse starter med udtrykket Sub (herefter vises makronavnet). Makroens slutning starter med udtrykket End Sub. Området mellem disse to linjer anvendes til programkode. I nedenstående billede er der ikke oprettet nogen kode. Excel XP VBA.doc Ver. 2 2003 F.M.T. 27

UOprettelse af makroer Microsoft Excel XP - Makroer med VBA Makroer kan kategoriseres Makroer kan inddeles i tre kategorier, Automatiserings Program - og Applikationsmakroer. Automatisering En makro som udfører almindelige arbejdsrutiner for eksempel når du åbner, lukker eller udskriver et dokument. Program En makro som tilføjer ny funktionalitet til Excel uden at påvirke det aktive dokument. Dette kan for eksempel være at definere en standardprinter eller at opdatere skabeloner fra et netværk. Applikation Et dokument som styres af en makro fra begyndelse til slutning. En applikationsmakro kan for eksempel starte en dialogboks, som anmoder om de nødvendige data. Derefter indsættes værdierne i dokumentet. Dokumentet gemmes og udskrives automatisk. En typisk applikation kan være en faktura, hvor makroen styrer fakturanummer, sammentællinger og lignende. 28 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprettelse af makroer Makroer prioriteres således Excel registrerer og afspiller makroer efter følgende prioritet: 1. Makroer gemt i det aktive dokument 2. Makroer gemt i skabelonen PERSON.XLS 3. Globale makroer som indlæses under referencen Ved start åbnes alle filer i, under Funktioner/Indstillinger/Fanen Generelt. Se Figur 3. eller makroer som er gemt i mappen XLSTART. Denne mappe findes under C:\Documents and Settings\Brugernavn\Application Data\Microsoft\Excel\XLSTART. eller programmer som er indlæst som et tilføjelsesprogram. 4. Excel-funktioner. Figur 3 Hvor skal makroer gemmes? Du kan i Excel XP gemme dine makroer tre forskellige steder: 1. Den aktive projektmappe. 2. En ny projektmappe. 3. Den personlige makroprojektmappe. Excel XP VBA.doc Ver. 2 2003 F.M.T. 29

UOprettelse af makroer Microsoft Excel XP - Makroer med VBA Du vælger hvor makroen skal gemmes, når du indspiller en makro: Figur 4 Klik her for at vælge hvor makroen skal gemmes Hvis du aktiverer rullelisten for Gem makro i:, vil du se disse muligheder: Figur 5 Vælg den ønskede placering Den aktive projektmappe: Dette er det normale sted at gemme makroer. Når du gemmer projektmappen, vil Excel også gemme de makroer du har oprettet. En ny projektmappe: Hvis dine makroer ikke er tilknyttet den aktuelle projektmappe, kan du vælge at gemme dem i en ny separat fil. Du skal blot huske at åbne eller indlæse filen, når du vil anvende makroerne. 30 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprettelse af makroer Den personlige makroprojektmappe: Den personlige makroprojektmappe oprettes som en skjult fil, når du vælger denne indstilling. Filen navngives som Person.xls og gemmes i mappen XLStart. Ved en fuld installation under Windows 2000 eller Windows XP: vil standard placeringen være: C:\Documents and Settings\brugernavn\Application Data\Microsoft\Excel\XLSTART De projektmapper som gemmes her vil automatisk blive indlæst, når du starter Excel. Excel XP VBA.doc Ver. 2 2003 F.M.T. 31

UOprettelse af makroer Microsoft Excel XP - Makroer med VBA 32 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UVisual Basic arbejdsvinduet 7. Visual Basic arbejdsvinduet Figur 6 Når du vælger at redigere en makro, vil Excel vise et nyt programvindue kaldet Visual Basic. Dette vindue vises oven på Excelprogramvinduet. Dette er et nyt programvindue Programkode Projekt Egenskaber De tre vinduer, du ser i Visual Basic-vinduet, er henholdsvis Code (Programkodevindue). Properties (Egenskabsvindue). Project (Projektoversigt). Som det fremgår af titellinjerne i hver af de tre vinduer vist ovenfor. Programkodevinduet Du ser den kode du indspiller eller indtaster, i programkodevinduet. Dette vindue anvendes som et almindeligt tekstredigeringsprogram. Excel XP VBA.doc Ver. 2 2003 F.M.T. 33

UVisual Basic arbejdsvinduet Microsoft Excel XP - Makroer med VBA Egenskabsvinduet Egenskabsvinduet viser dig forskellige informationer omkring det aktive dokument eller arbejdsmiljøet for det aktive dokument. Tip! Du vil her se mange af de egenskaber, du ser i menuen Funktioner/Indstillinger. Du kan aktivere egenskabsvinduet med [F4]. Projektvinduet Projektvinduet viser dine Excel-projekter, som kan indeholde Brugerformularer (brugertilpassede dialogbokse). Moduler som indeholder makroer. Klassemoduler. Henvisninger til andre Excel-dokumenter. Indlæste tilføjelsesprogrammer. Hvert åbent dokument og skabelon betragtes som et Excel-projekt og vises med en træstruktur i projektvinduet. Du anvender projektvinduet på samme måde som Windows stifinder. Du får adgang til makroredigeringsmiljøet fra menuen Funktioner/Makro/Visual Basic Editor eller ved at taste [Alt]+[F11]. 34 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UVisual Basic arbejdsvinduet Figur 7 Værktøjslinjerne i VBA vinduet Når du ser Visual Basic-vinduet, vil du ligeledes se én værktøjslinje kaldet Standard. Figur 8 Tip! Du kan fra Standard-værktøjslinjen aktivere andre værktøjslinjer, blandt andet Objektoversigten. Du skal pege på en knap for at se et værktøjstip. Excel XP VBA.doc Ver. 2 2003 F.M.T. 35

UVisual Basic arbejdsvinduet Microsoft Excel XP - Makroer med VBA Herudover findes der tre andre værktøjslinjer, nemlig: Debug Edit UserForm Debug værktøjslinjen indeholder knapper som giver mulighed for hurtigt at finde fejl i koden. Figur 9 Tip! Aktivér hjælpen i Visual Basic og søg på Debug Toolbar for at se hvorledes du anvender knapperne. Edit værktøjslinjen indeholder genvejsknapper til menupunkter, der ofte bruges. De er nyttige, hvis du redigerer programkode. Figur 10 Tip! Aktivér hjælpen i Visual Basic og søg på Edit Toolbar for at se hvorledes du anvender knapperne. UserForm værktøjslinjen indeholder knapper som gør det nemt at justere eller grupperer kontrolelementerne i en UserForm. Figur 11 36 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UVisual Basic arbejdsvinduet Figur 12 Toolbox værktøjslinjen identificerer de forskellige kontrolelementer, du kan tilføje til en formular. Figur 13 Object Browser viser de klasser, egenskaber, metoder, hændelser og konstanter, der er tilgængelige fra projektets objektbibliotek. Du kan anvende Objektoversigt til at finde objekter fra installerede Microsoft programmer, eksempelvis fra Visual Basic eller Microsoft Office XP, objekter du opretter samt objekter fra andre programmer. Excel XP VBA.doc Ver. 2 2003 F.M.T. 37

UVisual Basic arbejdsvinduet Microsoft Excel XP - Makroer med VBA Figur 14 Højreklik med musen for at aktivere hjælpen 38 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UVisual Basic og VBA 8. Visual Basic og VBA At oprette databaser, skrive dokumenter, udarbejde budgetter og grafer og vise disse resultater i en præsentation er det grundlæggende fundament i Microsoft Office. Microsoft Office giver dig imidlertid langt flere muligheder. Du kan integrerer oplysninger mellem programmerne, du kan udvide funktionaliteten i programmerne og du kan udvikle dine egne funktioner. Hertil kræves et kendskab til værktøjet Visual Basic for Applications (VBA). Visual Basic 6.0 eller Visual Basic NET 7.0 Du kan med programmeringssproget Visual Basic udvikle egne programmer, eksempelvis et tekstbehandlingsprogram, et regnskabsprogram eller en database. De programmer du udvikler kaldes for Windows Applikationer. Grundlæggende starter du din programmering ved at designe en brugerflade, derefter programmere du hvad der skal ske under denne brugerflade. Microsoft Office XP indeholder den dialekt af Visual Basic, som findes i version 6.0. Den seneste version af Visual Basic er imidlertid Visual Basic.NET som også indeholder værktøjer til programmering af WEB applikationer, konsol-applikationer og mobil-applikationer. Visual Basic for Applications Visual Basic er det programmeringssprog som anvendes i Microsoft Office pakken. Med Visual Basic for Applications behøver du ikke bruge tid på at designe en brugerflade, da programmerne i Microsoft Office pakken allerede har en brugerflade. Word, Excel, Access, PowerPoint, FrontPage, Outlook, Visio og Project har hver deres brugerflade som der ikke er nogen grund til at ændre på. Excel XP VBA.doc Ver. 2 2003 F.M.T. 39

UVisual Basic og VBA Microsoft Excel XP - Makroer med VBA Med Visual Basic for Applications kan du i stedet koncentrere dig om at udvide programmets funktionalitet, det vil sige at du programmere til en eksisterende platform (Application) dette er årsagen til at denne dialekt af Visual Basic hedder Visual Basic for Applications (VBA). Nogle af de udtryk du lærer at anvende i dette kompendium, kan også anvendes direkte i et Visual Basic program, eller i nogle af de andre programmer i Microsoft Office pakken. Andre af de udtryk du lærer at anvende i dette kompendium, kan imidlertid kun anvendes i Excel. Procedurer Når du programmerer, gemmes din kode i en procedure. En procedure er bredt sagt en samling af instruktioner, som udføre en eller flere handlinger eller beregninger. Der findes tre forskellige procedurer under VB(A): 1. Sub procedure 2. Function procedure 3. Property procedure Sub Procedure Sub procedurer kaldes populært for makroer. En Sub procedure indeholder ofte instruktioner som svarer til de indbyggede menuer. De indbyggede menuer betragtes som det øverste niveau i et hierarki, hvor brugerens instruktioner (procedurer) vil være det næste niveau heraf ordet Sub. Sub procedurer anvendes til at foretage fysiske handlinger, så som at gemme, lukke, åbne, redigere og formatere et dokument. Function Procedure Function procedurer kaldes populært for bruger-funktioner. Du anvender en Function procedure til at foretage beregninger, som din applikation ikke selv er i stand til. Du kan eksempelvis i Excel konstruere dine egne regnearksfunktioner eller i Access konstruere funktioner som udføre komplekse beregninger. 40 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UVisual Basic og VBA Det karakteristiske ved en funktion er at den ofte modtager argumenter som anvendes til beregningen, hvorefter funktionen returnere et resultat. Property Procedure Property procedurer anvendes til at beskrive eller ændre egenskaberne for et objekt egenskabs procedurer anvendes ofte i forbindelse med objekter du selv konstruere. Forestil dig at du i dit program konstruere et kalender-objekt. Et kalender-objekt vil typisk indeholde egenskaben måned (1 12), dag (1-31) samt tid (0 24). For at gøre det nemt for brugeren at anvende dit objekt, vil du typisk programmere hvilke egenskaber brugeren må definere eller ændre. Excel XP VBA.doc Ver. 2 2003 F.M.T. 41

UVisual Basic og VBA Microsoft Excel XP - Makroer med VBA 42 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA USproget i Visual Basic 9. Sproget i Visual Basic Figur 15 Objekt-programmering er fundamentet i anvendelsen af Visual Basic. De efterfølgende sider omhandler forskellige opgaver, som samlet skal tilføre inspiration og ideer til anvendelsen makroer i Excel XP. Det er derfor vigtigt, at det grundlæggende kendskab til Objekt Orienteret Programmering er til stede for at kunne løse opgaverne. Teknisk definition Du skal kende nedenstående udtryk samt deres betydning, for at du kan programmere i VBA. Controls Et grafisk objekt som du placerer i en formular eller direkte i regnearket. Kontrolelementet kan være en tekstboks, en rulleliste, en kombinationsboks, en trykknap eller andre lignende elementer. Figur 15 viser et eksempel på forskellige kontrolelementer. Excel XP VBA.doc Ver. 2 2003 F.M.T. 43

USproget i Visual Basic Microsoft Excel XP - Makroer med VBA Hændelse (Events) En handling som genkendes af et objekt, for eksempel et klik med musen, eller et tastetryk. Du kan programmere hvad programmet skal gøre når bestemte hændelser indtræffer. Metode (Methods) Metoder ligner en sætning eller en funktion (se beskrivelsen for procedurer nedenfor), men er knyttet til bestemte objekter. Objekt (Object) Et element i programmet som indeholder egenskaber med bestemte karakteristika, metoder som bestemmer dets handlinger og som er i stand til at reagere på forud definerede hændelser. Kontrolelementer og formularer er eksempler på objekter. I dine Excel dokumenter er grafer og billeder også objekter. Dine Pivottabeller er objekter og dine faner er objekter. Dine arbejdsvinduer og åbne dokumenter er ligeledes objekter. Procedure (Procedures) En række sammensatte erklæringer og sætninger i et modul, som udføres samlet som én hændelse. Procedurer i VBA omfatter Sub og Function procedurer (sætninger og funktioner). Du opretter en procedure som indeholder én eller flere sætninger. Sætninger En sætning er en kode, som udfører en handling, sætter eller læser en værdi eller tildeler en værdi til en variabel. Sætninger anvendes til fysiske handlinger som eksempelvis at skifte arbejdsmappe, at åbne, lukke eller udskrive et dokument. Funktioner Funktioner anvendes til at udføre beregninger. Funktioner kan ikke udføre fysiske handlinger. Du anvender eksempelvis en funktion til at beregne, hvor mange dage der er fra dags dato til juleaften eller til at tælle antallet af faner i et regneark. 44 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA USproget i Visual Basic Egenskab (Properties) En navngiven attribut knyttet til et kontrolelement eller et objekt, hvor du definerer karakteristika som størrelse, farve og lignende. Projekt (Project) Et projekt indeholder dine moduler, formularer og klasse-moduler. Når du programmerer løsninger med VBA i Excel, Word, Project, Outlook, Visio, Access og PowerPoint, så gemmes din kode i et projekt. Projektet knyttes til dokumentet eller til skabelonen. Et dokument kan kun tilknyttes ét projekt (gælder også skabeloner). Figur 16 Excel XP VBA.doc Ver. 2 2003 F.M.T. 45

USproget i Visual Basic Microsoft Excel XP - Makroer med VBA Excel objekter Det øverste objekt i Excel er Application. Application indeholder flere objekter, for eksempel Workbooksobjekter, som udgør de mapper du anvender i Excel. Workbooks er et underobjekt til Application. Tip! Du arbejder med objektsamlinger og enkelte objekter i Excel. En objektsamling er alle aktive instanser af et objekt. Eksempelvis indeholder Workbooks-objektsamlingen alle arbejdsmapper, diagrammer og dokumentegenskaber. Du kan i hjælpen udskrive et billede af objektsamlingen i Excel. Åbn Objektoversigten. Find udtrykket Application og højreklik med musen for at aktivere hjælpen. Figur 17 Find Application. Højreklik med musen og vælg Help Du vil se dette hjælpebillede: 46 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA USproget i Visual Basic Figur 18 Peg og klik på den blå boks som viser ordet Application Hvis du i Figur 18 klikker på den blå boks som viser ordet Application, vil du se dette hjælpebillede omkring Excel objekter: Excel XP VBA.doc Ver. 2 2003 F.M.T. 47

USproget i Visual Basic Microsoft Excel XP - Makroer med VBA Figur 19 Microsoft Excel Objekt-hierarki. Du kan udvide billedet ved at klikke på de røde pilemarkeringer. Hvis du i Figur 19 klikker på den røde pil ud for objektet Worksheets, vil du se dette billede: 48 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA USproget i Visual Basic Figur 20 Excel XP VBA.doc Ver. 2 2003 F.M.T. 49

USproget i Visual Basic Microsoft Excel XP - Makroer med VBA Referencer til objekter Du refererer til enkeltstående objekter eller til objekter i en samling, når du programmere. Objekter i samlinger En gruppe objekter af den samme type kan kombineres som en samling i objekthierakiet. Excel indeholder blandt andet en arbejdsmappesamling (Workbooks collection) som indeholder alle åbne mapper. Du kan referere til et objekt i hierakiet enten ved at anvende objektets navn eller dets indeksnummer (index). Indeksnummeret for det første objekt i samlingen er nummer [1] (Database objektsamlinger starter normalt med nummer [0]). Nedenstående kode viser hvorledes du refererer til en mappe ved hjælp af navn og ved hjælp af indeksnummer. Application.Workbooks("Mappe1.xls").PrintOut Application.Workbooks(1).PrintOut Enkeltstående objekter Det er ikke alle objekter, som tilhører samlinger. Excel indeholder også såkaldte enkeltstående objekter. Mens objekter i samlinger er objekter, som der findes flere eksemplarer af inden for en given sammenhæng, er der ved enkeltstående objekter tale om objekter, som der kun findes ét eksemplar af inden for et bestemt sammenhæng. I afsnittet ovenfor er der som eksempel på et objekt i en samling nævnt Mappe1.xls, som indgår i samlingen af alle de Workbooks, som programmet har adgang til. Da Workbooks indeholder mere end ét eksemplar, er man som vist tvunget til at referere til det ønskede objekt enten ved at angive dets navn eller dets indeksnummer i en parentes. Som eksempel på et enkeltstående objekt kan her nævnes objektet PageSetup. Dette objekt har du adgang til i et bestemt Worksheet, men inden for dette Worksheet findes der kun ét eksemplar af PageSetup (som bekendt kan man ikke have mere end én sideopsætning for et givet ark). Du skal derfor ikke ved et enkeltstående objekt angive noget yderligere navn eller indeksnummer i parentes. I nedenstående eksempel vises gitterlinjerne i Ark1 ved at sætte egenskaben PrintGridlines til True for objektet PageSetup. 50 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA USproget i Visual Basic NB! Worksheets( Ark1 ).PageSetup.PrintGridlines = True Bemærk her, at objektet Ark1 er et objekt i samlingen Worksheets, mens objektet PageSetup er enkeltstående og derfor ikke skal udstyres med parenteser til angivelse af hvilket eksemplar der er tale om: Egenskaber og metoder for en samling En samling er også et objekt, og har dermed egenskaber og metoder, så du kan kontrollere det. Eksempelvis har hver samling metoden Add, som tilføjer et objekt til samlingen samt egenskaben Count, som returnerer antallet af objekter i samlingen. Nedenstående kode viser antallet af åbne mapper i Excel. MsgBox Application.Workbooks.Count & " open workbooks." Eksempler på egenskaber i Excel Nedenstående viser forskellige eksempler på egenskaber i en Excel projektmappe: Application: HasPassword: Name: Path: ReadOnly: Det program (Excel) hvor mappen er oprettet. Ja, hvis sand, Nej hvis ikke. Navnet på projektmappen. Søgestien til projektmappen. Sand, hvis mappen er beskyttet, Falsk hvis ikke. Ovenstående viser, at egenskaber har tilknyttede værdier. Disse værdier kan være af typen tekst, tal eller af typen Sand/Falsk. Hvis du vil tildele en variabel værdien af en egenskab, angiver du dette således: Dim MyVariable As String MyVariable = ActiveWorkbook.Path Hvis du vil ændre en egenskabsværdi til værdien af en variabel, gør du det således: Dim MyVariable As String MyVariable = C:\Documents\Test ActiveWorkbook.Path = MyVariable En projektmappe er det eneste Excel objekt, som tildeles egenskaben HasPassword. Objektet Projektmappe er ligeledes det eneste objekt, som tildeles egenskaben ReadOnly. Excel XP VBA.doc Ver. 2 2003 F.M.T. 51

USproget i Visual Basic Microsoft Excel XP - Makroer med VBA På den anden side findes der mange Excel objekter, som indeholder egenskaben Name. Eksempler på metoder i Excel Nedenstående viser et eksempel på forskellige metoder, som kan udføres i en Excel projektmappe: Select: Close: PrintPreview: Protect: Save: Markerer det angivne areal. Lukker det pågældende objekt. Viser det aktive ark i VisUdskrift. Beskytter det angivne ark eller mappe. Gemmer den aktuelle fil. Med VBA kan du udføre følgende på objekter: Tildele en værdi til et objekts egenskab. Nedenstående kode indsætter en formel i en celle: Range( A1 ).Formula = =Sum(B1;C1;C3) Aflæse en værdi fra et objekts egenskab. Nedenstående kode opretter en variabel med navnet X, som tildeles værdien fra en celle: x = Range( A1 ).Value Anvende en metode til at aktivere et objekt. Nedenstående kode aktiverer en celle: Range( A1 ).Select Egenskaber og metoder En egenskab kontrollerer udseendet af, hvorledes synlige og skjulte objekter skal fremstå. En metode udfører handlinger på objektet. Det er i starten vanskeligt at skelne forskellen på egenskaber og metoder i VBA, men du bør huske følgende regel: Egenskabsværdier kan vises på venstre og højre side af et lighedstegn [=]. Metoder anvendes ved at skrive objektets navn efterfulgt af et punktum [.] efterfulgt af den ønskede metode, eksempelvis: 52 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA USproget i Visual Basic Range( A1 ).Value = 100 Nedenstående kode anvender metoden Cells til at tildele en værdi til variablen mc. Herefter anvendes metoden Adress til at vise værdien af mc i en MsgBox. Variablen mc er i dette tilfælde cellekoordinaten for celle A1. Sub FindKoordinat() Set mc = Sheets("Ark1").Cells(1, 1) MsgBox mc.adress() End Sub NB! Metoder kan kun vises på højre side af et lighedstegn [=]. De fleste objekter i Excel indeholder mange forskellige egenskaber og metoder - objektet Range - indeholder alene 75 metoder og 92 egenskaber. Nogle af disse egenskaber og metoder deles dog med andre objekter, men de fleste er unikke for objektet Range. Excel XP VBA.doc Ver. 2 2003 F.M.T. 53

USproget i Visual Basic Microsoft Excel XP - Makroer med VBA 54 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UVariabler 10. Variabler En variabel er en lagerplads som reserveres i hukommelsen til lagring af informationer, som programmøren definere i sit program. Forestil dig at du i IKEA skal have udleveret en kasse søm, på 5 kg. Kassen er 15 x 15 x 15 cm. Ved bestillingen hos ekspedienten får du en udleveringsseddel som oplyser at varen er placeret på hylde E14. Ved at kende varens nøjagtige placering på lageret, kan du finde varen på ca. 5 minutter kendte du ikke varens placering, skulle du enten gennemsøge hele lageret for en vare på 5 kg., som måler 15 x 15 x 15 cm. en sådan søgning kan tage flere dage eller du skulle vente til lageret blev tømt og håbe på at den tilovers blivende kasse var din. Når du programmere så foregår det på næsten samme måde du har i din programmering brug for at håndtere oplysninger, som er defineret på et tidligt tidspunkt i programmet. Første gang en oplysning skal gemmes (for senere anvendelse) definere du en lagerplads i hukommelsen. I stedet for at adressere hukommelsesområdet direkte, kan du i stedet anvende en navngiven placering dette kaldes for en variabel. I samme øjeblik du som programmør, programmet eller brugeren kalder variablens navn, vil den lagrede information blive returneret. Da variabler optager fysisk plads i hukommelsen, er den en god ide at reserveret tilstrækkelig, men ikke unødvendig plads i hukommelsen dette kaldes at definere en datatype. Erklæring af variabler Når programmøren skal anvende en variabel, tillader VBA to former for erklæringer, implicit og eksplicit. Ved implicit variabelerklæring skal programmøren blot kalde variablens navn, eksempelvis således: x = Hallo I dette eksempel oprettes der en variabel med navnet x som tildeles datatypen tekst (kaldes en String). Excel XP VBA.doc Ver. 2 2003 F.M.T. 55

UVariabler Microsoft Excel XP - Makroer med VBA Ved eksplicit variabelerklæring skal programmøren udføre tre ting 1. Definere variablens levetid 2. Navngive variablen 3. Tildele en datatype Et eksempel kunne se således ud: Dim x As String Nøgleordet Dim anvendes til at definere variablens levetid. Udtrykket x As String fortæller at variablens skal navngives som x og tildeles datatypen tekst. Når du arbejder med variabler, kan du anvende datatyper til at lagre variablens værdi. Eksempelvis vil nedenstående variabel D$ = Hans være datatype String (tekst). Nedenstående variabel er typisk typen tal. P = 400. Hvis du fortæller systemet, hvilken type data dine variabler og konstanter skal håndtere, kan du reducere den tid, det tager at udføre makroen. Datatyper håndteres i forskellige størrelser, som både optager plads i hukommelsen og på harddisken. I følgende tabel vises de understøttede datatyper, herunder lagerstørrelser og områder. Datatype Lagerstørrelse Område Byte 1 byte 0 til 255 Boolean 2 byte True eller False Integer (heltal) Long(langt heltal) Single (reelt tal med enkelt præcision) Double (reelt tal med dobbelt præcision) 2 byte -32.768 til 32.767 4 byte -2.147.483.648 til 2.147.483.647 4 byte -3,402823E38 til -1,401298E-45 for negative værdier. 1,401298E-45 til 3,402823E38 for positive værdier 8 byte -1,79769313486232E308 til - 4,94065645841247E-324 for negative værdier. 4,94065645841247E-324 til 1,79769313486232E308 for positive værdier 56 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UVariabler Datatype Lagerstørrelse Område Currency (skaleret heltal) 8 byte -922.337.203.685.477,5808 til 922.337.203.685.477,5807 Decimal 14 byte +/- 79.228.162.514.264.337.593.543.950.335 uden decimaltegn. +/- 7.9228162514264337593543950335 med 28 cifre til højre for decimaltegnet. Mindste ikke-nul tal er +/- 0,0000000000000000000000000001 Date 8 byte 1. januar 100 til 31. december 9999 Object 4 byte En Object-reference String (variabel længde) String(fast længde) Variant(med tal) Variant(med bogstaver) Brugerdefineret(anvender Type) 10 byte + strenglængde 0 til ca. 2 milliarder Længde af streng 1 til ca. 65.400 16 byte En numerisk værdi op til området for Double 22 byte + strenglængde Samme område som for variabellængden String Tal, der kræves af elementer Intervallet i hvert element er det samme som intervallet i den tilhørende datatype. Hvis du ikke definerer datatypen for din variabel, men bruger den direkte, vil Excel anvende datatypen variant, som optager meget plads. Du kan teste, hvorledes definitionen af forskellige datatyper har effekt på den tid, det tager at udføre makroen, ved at anvende et Array (se Matricer side 83), som tildeler hvert element i Arrayet en værdi. Afslut derefter med at vise den tid, det tog at udføre makroen, i en meddelelsesboks. Excel XP VBA.doc Ver. 2 2003 F.M.T. 57

UVariabler Microsoft Excel XP - Makroer med VBA Eksempelvis vil nedenstående kode kunne anvendes: Sub TestVariabelErklæring() Const Elementer = 20000000 Dim Var1 As Date, Var2 As Date, E(Elementer) As Double,_ T As Long Var1 = Time For T = 1 to Elementer E(T) = 10 Next Var2 = Time MsgBox Det tog & DateDiff( s, Var1, Var2) & sekunder. End Sub Afprøv ovenstående kode og redigér derefter datatypen for E og T til andre datatyper. Koden opretter et Array på 20.000.000 elementer, som hver tildeles værdien 10. Tiden aflæses på systemet, inden løkken udføres, hvorefter tiden aflæses igen. Den varighed, som ligger mellem de to tidsintervaller, vises i sekunder i en meddelelsesboks. Figur 21 Løkken udføres ved hjælp af en For Next instruktion (se Fejl! Henvisningskilde ikke fundet. side Fejl! Bogmærke er ikke defineret.). Objektvariabler Udover de almindelige datatyper som Byte, Integer, Long, Single, Double og String, indeholder VBA også en datatype af typen Objekt. Du kan med fordel anvende en objektvariabel alle steder i objekt hierakiet for et objekt. Hvis du refererer til det samme objekt flere steder i din kode, bør du anvende objektvariabler i stedet for at referere til hele objektsamlingen. Dette gør koden hurtigere. 58 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UVariabler Figur 22 For at anvende en objektvariabel skal du først erklære variablen og derefter anvende udtrykket Set til at tildele et objekt til variablen. Nedenstående kode erklærer en objektvariabel, som derefter knyttes til en celle i regnearket. Dim rngtest As Excel.Range Set rngtest = Application.Workbooks(1).Worksheets_ (1).Range("A:A") rngtest.value = 5 Ovenstående kode indsætter værdien 5 i alle cellerne i kolonne A. Variables levetid Når du opretter programkode i et modul, har du tre muligheder for at erklære en variabel 1. Offentlig variabelerklæring 2. Modul variabelerklæring 3. Procedure eller Funktions variabelerklæring Dette kan udføres således: Denne variabel kan anvendes i alle moduler Denne variabel kan anvendes overalt inden for det samme modul Denne variabel kan kun anvendes inden for den procedure den er erklæret i Her anvendes alle tre variabler Excel XP VBA.doc Ver. 2 2003 F.M.T. 59

UVariabler Microsoft Excel XP - Makroer med VBA Variabler som erklæres i sektionen Declarations med nøgleordet Public er tilgængelig overalt i alle moduler i programmet. Nøgleordet Const betyder at variablen er en konstant værdi som kan anvendes overalt. Da erklæringen udføres i sektionen Declaration, kan variablen anvendes overalt i samme modul. Nøgleordet Dim som udføres inden for en procedure, betyder at variablen kun kan anvendes i den procedure den er oprettet i. Nøgleord Dim Du kan blandt andet anvende nedenstående nøgleord, når du erklærer dine variabler. Nøgleordet Dim kan anvendes i en Sub, Function eller Property. Variablens levetid ophører når koden er gennemført, det vil sige når Sub en er færdig. Private Dim strfornavn As String Nøgleordet Private anvendes typisk i moduler som knyttet til en UserForm. Nøgleordet kan anvendes omkring variabler eller omkring en Sub eller Function. Variablen kan kun anvendes inden for formularen, og ophører med at eksisterer når formularen lukkes. Nedenstående eksempel viser en Private Sub. Static Private Sub CommandButton1_Click() Dim x As String x = Application.UserName MsgBox x End Sub Nøgleordet Static kan anvendes i sektionen Declaration eller i en Sub, Function eller Property. 60 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UVariabler Variablen kan anvendes efter endt kørsel det vil sige at variabel værdien huskes indtil programmet afsluttes. Private x As Integer Sub TestStatic() x = x + 1 MsgBox x End Sub Ovenstående kode vil vise en ny værdi for x, hver gang Sub en udføres. Public Nøgleordet Public anvendes i sektionen Declaration. Public variabler kan anvendes overalt i alle moduler. Eksempel på brug af en Lokal og Static variabel Nedenstående kode viser et eksempel på anvendelse af en lokal variabel, erklæret med Dim og en Static variabel: Sub CommandButton1_Click() Dim iløkke1 As Integer Static iløkke2 As Integer iløkke1 = iløkke1 + 1 iløkke2 = iløkke2 + 1 MsgBox "Værdien af den første variabel er " & iløkke1 & vbcrlf _ & " Den anden variabel er " & iløkke2, vbinformation End Sub Femte gang ovenstående makro afspilles, vil du se dette billede: Figur 23 Excel XP VBA.doc Ver. 2 2003 F.M.T. 61

UVariabler Microsoft Excel XP - Makroer med VBA Fejlvenlig kode Ikke-variante datatyper forårsager fejl, hvis du forsøger at tildele data til variabler de ikke er bestemt for, for eksempel: Dim NumVar As Integer Dim StrVar As String StrVar = "Dette er tekst" NumVar = StrVar' Fejl: Typer passer ikke sammen. NumVar = 40000' For stor. Forårsager fejlen Overløb. For ikke-variante datatyper udføres visse konverteringer. Reelle tal bliver for eksempel afrundet, hvis de tildeles til en variabel af datatypen Heltal. Hvis du ønsker at konvertere en streng til en taldatatype, skal du anvende en af funktionerne til konvertering af datatyper. Normalt behøver du ikke erklære variabler, før du benytter dem. Det er en bekvemmelighed, men kan let lede til fejl, hvis du ved en fejltagelse staver navnet på en variabel forkert. For at opfange denne type fejl kan du anvende sætningen Option Explicit, som skrives øverst i modulet. Du kan også indstille Visual Basic til altid at anvende eksplicit typeerklæring. Dette udføres som vist nedenfor. Sådan tvinges bestemt typeerklæring Aktivér Visual Basic-vinduet og aktivér menuen Tools/Options. Klik på fanen Editor og markér afkrydsningsfeltet Require Variable Declaration. 62 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UVariabler Figur 24 Anvend bestemt typeerklæring Typeerklæringstegn Nogle datatyper har specielle tegn, der gør det nemmere at oprette variabler. Disse er vist nedenfor: Variabeltype Tegn Integer % Long Single! Double # Currency String $ Stringvariabler kan i Excel anvendes til håndtering af tekst. Du kan erklære dine stringvariabler på to måder, bestemt eller ubestemt (på engelsk henholdsvis explicit eller implicit). Ubestemt erklæring af variabel Du anvender karakteren [$] til en ubestemt erklæring, eksempelvis som: & @ Excel XP VBA.doc Ver. 2 2003 F.M.T. 63

UVariabler Microsoft Excel XP - Makroer med VBA BrugerNavn$ = InputBox( Indtast dit navn ) Bestemt erklæring af variabel Du kan også erklære din stringvariabel som: Dim BrugerNavn As String Hvis du vil erklære din variabel som en streng af en bestemt længde, skal du anvende tegnet [*] eksempelvis som: NB! Dim UserName As String * 15 Den bestemte erklæring gælder alle variabeltyper. Nedenstående eksempel viser en fejl, som kan være svær at fange, når du ikke anvender eksplicit typeerklæring. Koden viser erklæringen af variablen StrVar. Denne variabel er stavet forkert i linje 5. Sub LæsVærdier() Dim NumVar As Integer Dim StrVar As String For NumVar = 0 to 9 StVar = "Noget tekst"'stavefejl i variabel. Next NumVar End Sub Uden indstilling Eksplicit ville denne type fejl ikke blive fundet, og du skulle bruge lang tid på at finde den. 64 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UVariabler Indstillingen eksplicit skrives således: Option Explicit Sub LæsVærdier() Dim NumVar As Integer Dim StrVar As String For NumVar = 0 to 9 StVar = "Noget tekst"'excel reagerer på denne variabel Next NumVar End Sub Tilføje data til en variabel Du kan tilføje data til en variabel eksempelvis således: Dim BrugerNavn As String BrugerNavn = Hans Jensen Eller med en InputBox. Dim Firma As String Firma = InputBox( Indtast dit firmanavn ) Excel XP VBA.doc Ver. 2 2003 F.M.T. 65

UVariabler Microsoft Excel XP - Makroer med VBA 66 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UBetingelser og løkker 11. Betingelser og løkker Betingelser og løkker er nødvendige for at kunne opbygge hurtige og fleksible makroer. Betingelser og løkker bliver ofte betegnet som kontrolstrukturen. Makroen kan struktureres til at blive udført, dersom bestemte betingelser er opfyldt. Er dette tilfældet, ønsker man ofte, at én eller flere handlinger udføres. Betingelser Hvad er en betingelse En betingelse fortæller en makro, at en given situation skal være opfyldt, før én eller flere instruktioner kan udføres. Du kan sammenligne en betingelse med, at der skal være benzin på bilen, før den kan køre. Du bruger en IF sætning til at undersøge en eller flere betingelser. If Then Else betingelse Ønsker du at teste, om en betingelse et opfyldt, skal du anvende If Then Else, som opbygges således: If Navn = Hans then MsgBox Du hedder Hans Else MsgBox Jeg kender ikke dit navn End If På almindelig dansk står der: Test hvis navn er Hans, så vis meddelelsesboks med beskeden Du hedder Hans ellers vis meddelelsesboks med beskeden Jeg kender ikke dit navn. Afslut testen. Eksempelvis kan du stille brugeren forskellige spørgsmål og reagere ud fra de svar, du modtager: Excel XP VBA.doc Ver. 2 2003 F.M.T. 67

UBetingelser og løkker Microsoft Excel XP - Makroer med VBA Spørgsmål Figur 25 Reaktion, hvis Ja Reaktion, hvis Nej, og nyt spørgsmål Du kan fortsætte med nye betingelser eller test Ovenstående meddelelsesbokse vises ved hjælp af følgende kode: Sub Løn() Dim Svar As Byte Svar = MsgBox("Har du fået løn", 36, "LØN") If Svar = vbyes Then MsgBox "Du må gerne gå hjem",, "AFSLUT" Else Svar = MsgBox("Vil du rykke Hr. Pedersen", 36, "RYK") If Svar = 6 Then MsgBox "Han sidder på lokal 33", 64, _ "TELEFONLISTE" Else MsgBox "OK - håber du får den i næste måned", _, "HELD OG LYKKE" End If End If End Sub 68 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UBetingelser og løkker Prøv at indsætte Or her. NB! If Then ElseIf betingelse Ønsker du at teste, om flere betingelser er opfyldt, skal du anvende If Then ElseIf, som anvendes således: And og Or If Navn = Hans then MsgBox Du hedder Hans ElseIf Navn = Ulla then MsgBox Du hedder Ulla Else MsgBox Jeg kender ikke dit navn End If Du kan undersøge, om flere betingelser er opfyldt eksempelvis som vist ovenfor med If Then Else. Der kan imidlertid være tilfælde, hvor du ønsker at undersøge et interval af værdier, eller om flere værdier er opfyldt. Hertil kan du anvende funktionerne And eller Or. Sub TestTid() If Time >= 09:00:00 And Time <= 16:00:00 then MsgBox Du har ikke fri endnu ElseIf Time < 20:00:00 And Time > 04:00:00 then MsgBox Du er nok på overarbejde hva Else MsgBox Hvad laver du her på denne tid? End If End Sub Anvender du And, skal begge betingelser være opfyldt, som vist i ovenstående kode. Anvender du udtrykket Or, kræves der blot at én af værdierne skal være opfyldt. Excel XP VBA.doc Ver. 2 2003 F.M.T. 69

UBetingelser og løkker Microsoft Excel XP - Makroer med VBA Sub AnvendOr() Dim n As String start: n = InputBox("Indtast dit Password", "System adgang") If n = "011GODKEND13" Or n = "13godkend011" Then MsgBox "Du har adgang" Else MsgBox "Indtast korrekt Password" GoTo start End If End Sub Select Case Du anvender sætningen Select Case til at udføre én eller flere handlinger, afhængig af en bestemt værdi i et udtryk. I dette eksempel oprettes en funktion, som beregner en lønværdi, ud fra værdifaktoren for Indsats. Function Bonus(Indsats, Løn) Select Case Indsats Case 1 Bonus = Løn * 0.1 Case 2 Bonus = Løn * 0.2 Case 3 Bonus = Løn * 0.3 End Select End Function Du kan med fordel anvende Select Case til at undersøge og udføre en række handlinger, hvis du vil teste hvilken alternativknap der er valgt, i én eller flere gruppebokse. Hvis du i en makro skal anvende værdien fra en funktion, kan nedenstående eksempel anvendes: 70 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UBetingelser og løkker Function Bonus(Indsats, Løn) Select Case Indsats Case 1 Bonus = Løn * 0.1 Case 2 Bonus = Løn * 0.2 Case 3 Bonus = Løn * 0.3 End Select End Function Løkker Sub VisLøn() MsgBox "Din løn er " & Bonus(3, 1000) End Sub I ovenstående eksempel anvender makroen VisLøn resultatet af den beregning, som udføres i funktionen Bonus. Argumenterne 3, 1000 overføres til funktionen, hvorefter resultatet vises i en MsgBox. For Next I følgende eksempel bruges sætningen For...Next til at oprette en streng, der indeholder ti forekomster af tallene 0 til 9. Strengene adskilles med et enkelt mellemrum. I den ydre løkke bruges en variabel som løkketæller, der tælles ned hver gang, løkken gennemløbes. Dim Words, Chars, MyString For Words = 10 To 1 Step -1 ' Angiv 10 gentagelser. For Chars = 0 To 9' Angiv 10 gentagelser. MyString = MyString & Chars' Føj tallet til strengen. Next Chars' Tæl tælleren op MyString = MyString & " "' Tilføj et mellemrum. Next Words For Each Next For Each...Next-sætninger gentager en blok af sætninger for hvert objekt i en samling eller hvert element i en matrix. Visual Basic angiver automatisk en variabel, hver gang løkken udføres. I følgende procedure lukkes for eksempel alle formularer undtagen den formular, der indeholder den procedure, der afspilles: Excel XP VBA.doc Ver. 2 2003 F.M.T. 71

UBetingelser og løkker Microsoft Excel XP - Makroer med VBA Do Loop Sub CloseForms() For Each frm In Application.Forms If frm.caption <> Screen. ActiveForm.Caption Then frm.close Next End Sub Du kan bruge Do...Loop sætninger til at afspille en blok af sætninger et ubestemt antal gange. Sætningerne gentages, enten mens en betingelse er True, eller indtil en betingelse bliver False. Gentagelse af sætninger indtil en betingelse bliver sand Der er to måder at bruge det reserverede ord Until på til at kontrollere en betingelse i en Do...Loop sætning. Du kan kontrollere betingelsen, før du starter løkken (som vist i proceduren ChkFirstUntil), eller du kan kontrollere den, når løkken har kørt mindst én gang (som vist i proceduren ChkLastUntil). Løkken gentages, så længe betingelsen er False. Sub ChkFirstUntil() counter = 0 mynum = 20 Do Until mynum = 10 mynum = mynum - 1 counter = counter + 1 Loop MsgBox "Løkken udførte " & counter & " gentagelser." End Sub Sub ChkLastUntil() counter = 0 mynum = 1 Do mynum = mynum + 1 counter = counter + 1 Loop Until mynum = 10 MsgBox "Løkken udførte " & counter & " gentagelser." End Sub 72 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UBetingelser og løkker While Wend I følgende eksempel bruges sætningen While...Wend til at tælle en tællervariabel op. Sætningerne i løkken udføres, så længe betingelsen evalueres til True. Dim Counter Counter = 0' Initialiser variablen. While Counter < 20' Kontroller værdien i Counter. Counter = Counter + 1' Tæl Counter op. Wend' Afslut While-løkke, når Counter > 19. Debug.Print Counter' Udskriv 20 i vinduet Fejlfinding. Ovenstående kode viser resultatet i vinduet Immediate. Figur 26 Gentagelse af sætninger mens en betingelse er sand Der er to måder at bruge det reserverede ord While på til at kontrollere en betingelse i en Do...Loop sætning. Du kan kontrollere betingelsen, før du starter løkken, eller du kan kontrollere den, når løkken har kørt mindst én gang. I følgende ChkFirstWhile-procedure kontrollerer du betingelsen, før du starter løkken. Hvis mynum angives til 9 i stedet for 20, bliver sætningerne i løkken aldrig afspillet. I proceduren ChkLastWhile afspilles sætningerne i løkken kun én gang, før betingelsen bliver False. Excel XP VBA.doc Ver. 2 2003 F.M.T. 73

UBetingelser og løkker Microsoft Excel XP - Makroer med VBA Sub ChkFirstWhile() counter = 0 mynum = 20 Do While mynum > 10 mynum = mynum - 1 counter = counter + 1 Loop MsgBox "Løkken udførte " & counter & " gentagelser." End Sub Sub ChkLastWhile() counter = 0 mynum = 9 Do mynum = mynum - 1 counter = counter + 1 Loop While mynum > 10 MsgBox "Løkken udførte " & counter & " gentagelser." End Sub 74 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UDokumentation af makroer 12. Dokumentation af makroer Figur 27 Hvis du programmerer makroer, som andre skal anvende, bør du dokumentere makroerne. Det er en god idé at udfærdige en kort vejledning i brugen af makroen, og eventuelt hvorledes makroen installeres. Det nemmeste er at indsætte dokumentationen i modulet, sammen med VBA-koden. Du kan oprette kommentarer ved at indsætte en apostrof før kommentaren. Kommentarer kan indsættes i separate linjer i modulet, eller efter VBA-koden, som vist nedenfor: Du gør makroen mere læsevenlig, hvis du indsætter dine kommentarer i separate linjer, oven for den pågældende kode. Excel XP VBA.doc Ver. 2 2003 F.M.T. 75

UDokumentation af makroer Microsoft Excel XP - Makroer med VBA 76 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UArbejde med tekst 13. Arbejde med tekst Dette afsnit viser dig forskellige tips til håndtering af tekst, som kan være nyttigt i Excel, blandt andet til at undersøge hvad brugeren indtaster i regnearket, eller i en dialogboks. ANSI-tegnsæt Et 8-bit tegnsæt i ANSI (American National Standards Institute) der bruges til at angive op til 256 tegn (0-255) ved hjælp af tastaturet. De første 128 tegn (0-127) svarer til bogstaverne og symbolerne på et dansk standardtastatur. De næste 128 tegn (128-255) repræsenterer specialtegn, såsom bogstaver i internationale alfabeter, accenter, valutasymboler og brøker. ASCII-tegnsæt Et 7-bit tegnsæt i ASCII (American Standard Code for Information Interchange) som bruges til at repræsentere de bogstaver og symboler, der findes på dansk standardtastatur. ASCII-tegnsættet er identisk med de første 128 tegn (0-127) i ANSI-tegnsættet. Nedenstående procedurer viser eksempler på hvorledes du kan arbejde med tekst ved hjælp af funktionerne Left, Mid, Right og InStr: Sub Vestre() 'Demonstration af funktionerne Left og InStr 'Koden henter postnummeret ud fra en streng med postnummer og by 'Postnummeret kan her bestå af et vilkårligt antal tegn, 'men postnummeret og bynavnet skal være adskilt af et mellemrum Dim PostnrBy As String, Postnr As String, AntalPostnrTegn As Integer PostnrBy = InputBox("Skriv postnummer og bynavn") AntalPostnrTegn = InStr(1, PostnrBy, " ") - 1 Postnr = Left(PostnrBy, AntalPostnrTegn) MsgBox "Postnummeret er: " & Postnr End Sub Excel XP VBA.doc Ver. 2 2003 F.M.T. 77

UArbejde med tekst Microsoft Excel XP - Makroer med VBA Sub Højre() 'Demonstration af funktionerne Right og InStr 'Koden henter husnummeret ud fra en streng med gadenavn og husnummer 'Gadenavn og husnummer skal være adskilt af et mellemrum Dim Adresse As String, Husnr As String, Tæller As Integer Adresse = InputBox("Skriv gadenavn og husnummer") Tæller = 1 Husnr = Right(Adresse, Tæller) Do While Not InStr(1, Husnr, " ") = 1 Tæller = Tæller + 1 Husnr = Right(Adresse, Tæller) Loop MsgBox "Husnummeret er: " & Husnr End Sub Sub BagFra() 'Demonstration af funktionerne Len og Mid 'Koden staver et angivet navn bagfra Dim Navn As String, AntalTegn As Integer, Tæller As Integer Dim Tegn As String, Baglæns As String Navn = InputBox("Skriv dit navn") AntalTegn = Len(Navn) For Tæller = 0 To AntalTegn - 1 Tegn = Mid(Navn, AntalTegn - Tæller, 1) Baglæns = Baglæns & Tegn Next Tæller MsgBox "Dit navn staves sådan bagfra: " & Baglæns End Sub Arbejde med tekst i Excel Dette afsnit viser hvorledes du ved hjælp af funktionerne Højre, Venstre og Midt (Right, Left and Mid) kan konvertere et CPRnummer til en talværdi, du kan anvende i beregninger. Når du indtaster CPRnumre i Excel, vil numre som starter med værdien [0] ikke blive vist. Det vil sige at Excel sletter [0] fra cellen. Selvom du anvender den specielle formatering, som hedder Personnumre, vil Excel stadig fjerne nulværdier, hvis de er indtastet som første karakter. Dette er vist i nedenstående billede. 78 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UArbejde med tekst Figur 28 Personnumre skal indtastes som tekst, før du kan vise nulværdier Der kan være tilfælde hvor du ønsker at beregne personens alder eller køn. Nedenstående billede viser eksempler på, hvorledes du beregner alderen eller kønnet. Den formel som er indtastet i kolonne B, er vist som tekst i kolonne C. Excel XP VBA.doc Ver. 2 2003 F.M.T. 79

UArbejde med tekst Microsoft Excel XP - Makroer med VBA Figur 29 Funktionen HØJRE anvendes til at hente den sidste karakter i CPRnummeret De første 6 karakter er konverteret til en datoværdi Ved at kende datoværdien, kan alderen beregnes Nedenstående funktioner kan udarbejdes i VBA, til beregning af alder eller køn, på CPRnumre. Figur 30 Funktion til beregning af alder Function BeregnAlder(CPRnummer) BeregnAlder = Year(Now() - DateValue(Val(Left(CPRnummer,2)) & "-" & Val(Mid(CPRnummer, 3, 2)) & "-" & Val(Mid(CPRnummer, 5, 2)))) - 1900 End Function Brugerfunktion til beregning af alder 80 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UArbejde med tekst Figur 31 Funktion til beregning af Køn Function VisKøn(CPRnummer) If Right(CPRnummer, 1) Mod 2 > 0 Then VisKøn = "Mand" Else VisKøn = "Kvinde" End If End Function Brugerfunktion til beregning af Køn, ud fra CPRnummer Finde et filnavn ud fra søgesti og filnavn Du kan med funktionen Mid() finde filnavnet fra en søgesti. I nedenstående kode anvendes VB funktionerne Mid(), InStr() og Len() i en løkke, til at udtage filnavnet fra en søgesti, som indeholder éen eller flere [\]. Sub Aflæs_Filnavn() Dim x As String x = "C:\Windows\Skrivebord\VB Kursus\VBA.txt" Do While InStr(x, "\") x = Mid(x, InStr(x, "\") + 1, Len(x)) Loop MsgBox x End Sub Do While løkken kører så længe tegnet [\] findes i søgeteksten. Funktionen InStr() anvendes til at angive søgeværdien i en søgestreng. Excel XP VBA.doc Ver. 2 2003 F.M.T. 81

UArbejde med tekst Microsoft Excel XP - Makroer med VBA Mid() funktionen aflæser et tegn fra en given position i en søgestreng. Len() funktionen aflæser længden af en søgestreng. Instr() Syntaks - Instr(Søgestreng,Søgetekst) Instr( Jens peder Pedersen, P ) returnere værdien 12, da søgeteksten P findes på 12 position i søgestrengen. Mid() Syntaks - Mid(Søgestreng,Position,Antal) Mid( 55-42-666,4,2) returnere værdien 42, da der søges efter 2 karakter på 4 position i søgeteksten. Len() Syntaks - Len(Søgestreng) Len( Jens Ole ) returnere 8, da søgeteksten indeholder 8 karakter (inkl. mellemrummet mellem Jens og Ole). InstrRev() Syntax InstrRev(stringcheck, stringmatch[, start[, compare]]) Funktionen InstrRev kan anvendes til at finde en forekomst af tekst i en anden tekst, hvor søgningen starter bag fra. I nedenstående eksempel aflæses filnavnet fra en søgesti således: Sub Find_Filnavn() Dim x As String x = "C:\Windows\Skrivebord\VB Kursus\VBA.txt" x = Right(x, Len(x) - InStrRev(x, "\")) MsgBox x End Sub 82 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UMatricer (Arrays) 14. Matricer (Arrays) Når du laver applikationer, der arbejder med større mængder af data, får du brug for ar arbejde med matricer kaldet Arrays som betyder række eller samling og angiver, at du har mere end én variabel med same navn. Forestil dig, at du skal behandle 50 fornavne i din applikation. I stedet for at anvende variablerne Navn1, Navn2, Navn3 osv. Er det nemmere at anvende én variabel med navnet Navn, som behandler hele rækken af fornavne. Du kan i dit program oprette én variabel til behandling af fornavne, eksempelvis som Dim Fornavn As String Ovenstående variabel kan kun håndtere ét fornavn ad gangen. Hvis du ønsker at variablen skal håndtere 50 fornavne, skal den erklæres således Dim Fornavn (50) As String Ovenstående variabel giver 50 variabler af typen String, med navnet Fornavn. Faktisk får du 51 variabler, da værdien 0 også kan bruges. For at undgå forviklinger, kan du i stedet angive at variablen skal starte med 1 og slutte med 50, eller at den slutter ved 49. Dette udføres i en generelle sektion i modulvinduet, hvor du skriver Option Base 1 Dermed starter alle arrays med værdien 1 i stedet for 0. Er array kan sammenlignes med rækken i en tabel, eksempelvis: Index (1) (2) (3) (4) (5) (6) Ole Peter Jens Pia Gitte Søren For at kunne finde den ønskede værdi i et array, anvender du Indeksering. Du tildeler arrayet dine værdier således: Excel XP VBA.doc Ver. 2 2003 F.M.T. 83

UMatricer (Arrays) Microsoft Excel XP - Makroer med VBA Dim Fornavn(50) As String Fornavn(1) = Ole Fornavn(2) = Peter Fornavn(3) = Jens Fornavn(50) = Anders Når du ønsker at vise en værdi fra et array, anvender du index nummeret, eksempelvis MsgBox Fornavn(3) Hvis de værdier der skal tildeles til matricen findes som tekst, adskilt af et komma, kan du tilføje værdierne således: Dim vardata As Variant vardata = Array("Ole", "Peter", Jens ) Arrays i 2 dimensioner Du kan oprette arrays i flere dimensioner, men det er dog sjældent at du har brug for mere end 2 dimensioner. I ovenstående eksempel, skal vi nu oprette en ekstra dimension til håndtering af adresser og telefonnumre, dette gøres således: (1) (2) (3) (4) (1) Ole Jensen Pia Hansen Knud Sørensen Vibeke Olsen (2) Nørregade 4 Søndergade 2 Østergade 1 Vestergade 14 (3) 4000 Roskilde 3000 Helsingør 6000 Kolding 5000 Odense C (4) 40102030 30102030 60102030 50102030 Definition af Type For at kunne anvende et Array i flere dimensioner, hvor de enkelt dimensioner kan indeholde forskellige værdier (tal, tekst, datoer), skal du starte med at oprette en type. Opret en ny formular i en projektmappe. Navngiv mappen som Variabler. Omdøb formularen til Arrays_2D. Indtast følgende i sektionen Declarations i kodevinduet til formularen: 84 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UMatricer (Arrays) Figur 32 Type Person 'erklærer typen Person med sammensatte variabler Navn As String Adresse As String Postnr As String Telefon As Long End Type Du har nu defineret en Type med navnet Person. Da typen Person indeholder variabler af forskellige datatyper, kaldes dette for en sammensat type. For at kunne anvende denne type i formularen Arrays_2D, skal du indtaste følgende i sektionen Declarations i formularen Arrays_2D: Figur 33 Opret derefter 2 kommandoknapper i formularen: Excel XP VBA.doc Ver. 2 2003 F.M.T. 85

UMatricer (Arrays) Microsoft Excel XP - Makroer med VBA Figur 34 Hvis du ønsker at tildele data for henholdsvis Navn, Adresse, Postnummer og By samt Telefon, kan du oprette en kode der ser således ud: Private Sub Command1_Click() Oplysninger.Navn = InputBox("Indtast Fornavn og Efternavn") Oplysninger.Adresse = InputBox("Indtast adresse") Oplysninger.Postnr = InputBox("Indtast Postnummer og By") Oplysninger.Telefon = InputBox("Indtast telefonnummer") End Sub Ovenstående kode vil imidlertid kun oprette én person. Hvis du skal oprette eksempelvis 5 personer, skal du ændre koden som følger: 86 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UMatricer (Arrays) Figur 35 Bemærk at der i sektionen Declaration er erklæret en variabel med navnet ID. Når du kører formularen, vil du blive anmodet om at indtaste oplysninger: Figur 36 Ønsker du at se oplysningerne fra dit Array, kan du oprette denne kode til Command2_Click(). Excel XP VBA.doc Ver. 2 2003 F.M.T. 87

UMatricer (Arrays) Microsoft Excel XP - Makroer med VBA Figur 37 Koden Chr$(9) opretter et tabulatortegn. Koden Chr$(13) opretter et linjeskift. Dermed kan du returnere oplysningerne til en MsgBox. Figur 38 Hente en matrice fra en ekstern tekstfil Du kan få brug for, at vise en liste af værdier i en kombinationsboks, hvor listen hentes fra en tekstfil (ASCII fil, ANSI fil, DOS fil eller Notesblok format). Når du arbejder med store datamængder, er det ofte hensigtsmæssigt at skrive data til eller læse data fra en fil. Med sætningen Open kan du oprette filer og få adgang til dem direkte. Open indeholder tre typer filadgang: 88 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UMatricer (Arrays) NB! Sekventiel adgang (Input-, Output- og Append-tilstand) bruges til at skrive tekstfiler, for eksempel fejllogger og rapporter. Sætningen Open bør ikke bruges til at åbne et programs egne filtyper. Brug for eksempel ikke Open til at åbne et Worddokument, et Microsoft Excel-regneark eller en Microsoft Accessdatabase. Det vil medføre tab af filintegritet og filbeskadigelse. Nedenstående kode, viser hvorledes du henter data fra en tekstfil. Først åbnes filen med Open, dernæst tilføjes data fra filen til en variabel, med funktionen Input. Funktionen Input Sub VisTekst() Dim n$ Dim p n$ = " C:\Documents and Settings\BRUGERNAVN\Skrivebord\\vba.txt" Open n$ For Input As #1' Åbn en fil til input. Do While Not EOF(1)' Udfør løkken indtil slutningen af filen. Loop Input #1, p o$ = o$ + p + Chr$(13) Close #1' Luk filen. MsgBox o$ End Sub Tekstfilen, som er anvendt i ovenstående kode, indeholder disse værdier: Excel XP VBA.doc Ver. 2 2003 F.M.T. 89

UMatricer (Arrays) Microsoft Excel XP - Makroer med VBA Figur 39 Data i en ekstern tekstfil Bemærk at de viste data ikke er sorteret. Makroen viser denne meddelelsesboks: Figur 40 Da filen ikke vises fysisk på skærmen i åben tilstand, skal du huske at lukke den igen med sætningen Close. 90 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UMatricer (Arrays) Indsæt eller tilføj tekst i en fil Du kan indsætte eller tilføje tekst i en ekstern tekstfil, ved hjælp af Write eller Append. Tilstand Write Nedenstående kode sender tekst til en fil. Hvis filen allerede indeholder tekst, vil den blive overskrevet. Sub SendTekst() 'Nedenstående sender tekst til en fil, hvis der 'findes tekst i filen, overskrives den. Dim n$ Dim o$ n$ = "c:\windows\skrivebord\vba.txt" o$ = "11111111" Open n For Output As #1' Åbn en fil til output. Write #1, o$' Skriv data til filen. Close #1' Luk filen. End Sub Tilstand Append Du kan tilføje data til en ekstern tekstfil, ved hjælp af Append. Hvis filen allerede indeholder tekst, vil de nye data blive tilføjet til filen. Sub TilføjTekst() 'Nedenstående sender tekst til en fil, hvis der 'findes tekst i filen, tilføjes den i slutningen. Dim n$ n$ = "c:\windows\skrivebord\vba.txt" m$ = InputBox("Indtast et tal på 8 cifre", "TAL") Open n$ For Append As #1' Åbn en fil til output. Write #1, m$' Skriv dataene. Close #1' Luk filen. End Sub Excel XP VBA.doc Ver. 2 2003 F.M.T. 91

UMatricer (Arrays) Microsoft Excel XP - Makroer med VBA 92 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBAUSub-rutiner og brugerdefinerede funktioner 15. Sub-rutiner og brugerdefinerede funktioner Sub-rutiner Du kan bruge en Sub-procedure til at organisere andre procedurer, så de er lettere at forstå og foretage fejlfinding i. I følgende eksempel kalder proceduren SubRutine proceduren GentagBeep ved at overføre værdien 56 som argumentet. Når GentagBeep er afspillet, returnerer kontrollen til SubRutine, og SubRutine kalder proceduren Besked. Besked viser en meddelelsesboks, hvor brugeren klikker på OK, der returneres til SubRutine og SubRutine afsluttes. Sub SubRutine() GentagBip 56 Besked End Sub Sub GentagBip(numbeeps) For tæller = 1 To numbeeps Beep Next tæller End Sub Sub Besked() MsgBox "Det er på tide at holde pause!" End Sub Kald af Sub-procedurer med mere end ét argument I følgende eksempel vises to måder at kalde en Sub-procedure på med mere end ét argument. Anden gang HusKalk kaldes, er parenteserne nødvendige omkring argumenterne, fordi sætningen Call bruges. Excel XP VBA.doc Ver. 2 2003 F.M.T. 93

USub-rutiner og brugerdefinerede funktionermicrosoft Excel XP - Makroer med VBA Sub KaldSubProcedure() HusKalk 99800, 43100 eksempel 1 Call HusKalk(380950, 49500) eksempel 2 End Sub Sub HusKalk(pris As Single, løn As Single) If 2.5 * løn <= 0.8 * pris Then MsgBox "Du har ikke råd til dette hus." Else MsgBox "Du har råd til dette hus." End If End Sub Der er ingen funktionel forskel på hvorledes du kalder sub-rutinen. Du kan anvende funktionen Call eller skrive sub-rutinens navn direkte. Brugerdefinerede funktioner Brugerdefinerede funktioner anvendes typisk til udførelse af beregninger eller til at fastsætte værdier. En brugerfunktion kan ligesom en sub-rutine kaldes fra en makro. En Function-procedure er en række Visual Basic-sætninger, der er omsluttet af sætningerne Function og End Function. En Functionprocedure ligner en Sub-procedure, men en funktion kan også returnere en værdi. En Function-procedure kan tage argumenter for eksempel konstanter, variabler eller udtryk, der overføres til den af en kaldende procedure. Hvis en Function-procedure ikke har argumenter, skal Function-sætningen medtage et tomt sæt parenteser. En funktion returnerer en værdi ved at tildele en værdi til dens navn i en eller flere sætninger i proceduren. I følgende eksempel omregner funktionen Celsius Fahrenheitgrader til Celsius-grader. Når funktionen kaldes fra proceduren BeregnTemperatur, overføres en variabel, der indeholder argumentets værdi, til funktionen. Resultatet af beregningen returneres til den kaldende procedure og vises i en meddelelsesboks. 94 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBAUSub-rutiner og brugerdefinerede funktioner Sub BeregnTemperatur() temp = Application.InputBox(Prompt:= _ "Indtast temperaturen i Fahrenheit-grader.", Type:=1) MsgBox "Temperaturen er " & Celsius(temp) & " grader _ Celsius." End Sub Function Celsius(fDegrees) Celsius = (fdegrees - 32) * 5 / 9 End Function Brug af parenteser ved kald af funktioner Hvis du skal bruge returværdien i en funktion, skal du tildele funktionen en variabel og omslutte argumenterne i parenteser som vist i følgende eksempel: Sub MsgBoxMedParantes() Answer3 = MsgBox("Er du tilfreds med din løn?", 4,_ "Spørgsmål 3") End Sub Hvis du ikke er interesseret i returværdien i en funktion, kan du kalde en funktion på samme måde, som du kalder en Subprocedure. Udelad parenteserne, anfør argumenterne, og tildel ikke funktionen til en variabel, som vist i følgende eksempel: NB! Sub MsgBoxUdenParentes() MsgBox "Opgaven er fuldført!", 0, "Opgaveliste" End Sub Hvis du medtager parenteser i ovenstående eksempel, medfører sætningen en syntaksfejl. Overførsel af navngivne argumenter En sætning i en Sub- eller Function-procedure kan overføre værdier til kaldte procedurer ved hjælp af navngivne argumenter. Du kan angive navngivne argumenter i vilkårlig rækkefølge. Et navngivet argument består af navnet på argumentet efterfulgt af et kolon og et lighedstegn (:=) samt den værdi, argumentet tildeles. I følgende eksempel kaldes funktionen MsgBox ved hjælp af navngivne argumenter uden returværdi: Excel XP VBA.doc Ver. 2 2003 F.M.T. 95

USub-rutiner og brugerdefinerede funktionermicrosoft Excel XP - Makroer med VBA Sub MsgBoxUdenReturVærdi() MsgBox Title:="Opgaveliste", Prompt:="Opgaven er fuldført!" End Sub I følgende eksempel kaldes funktionen MsgBox ved hjælp af navngivne argumenter. Returværdien tildeles variablen answer3. Sub MsgBoxMedReturVærdi() answer3 = MsgBox(Title:="Spørgsmål 3",Prompt:="Er du_ tilfreds med din løn?", Buttons:=4) End Sub Kald af en procedure med samme navn Du kan kalde en procedure, der findes i et vilkårligt modul i det samme projekt som det aktive modul, på samme måde, som du vil kalde en procedure i det aktive modul. Men hvis to eller flere moduler indeholder en procedure med samme navn, skal du angive et modulnavn i den kaldende sætning som vist i følgende eksempel: Sub KaldProcedureMedSammenavn() Module1.MyProcedure End Sub Hvis du giver to forskellige procedurer i to forskellige projekter samme navn, skal du angive et projektnavn, når du kalder den pågældende procedure. I følgende eksempel kaldes for eksempel proceduren KaldProjektOgProcedure i modulet MyModule i projektet My- Project.vbp: Sub KaldProjektOgProcedure() [MyProject.vbp].[MyModule]. KaldProjektOgProcedure End Sub 96 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA URegnefunktioner 16. Regnefunktioner Dette afsnit viser hvorledes du konstruere dine egne regnefunktioner i Excel. Hvorfor skal man oprette sine egne regnefunktioner? De fleste brugere kender de indbyggede regnefunktioner i Excel, som SUM, MIDDEL og HVIS. Excel indeholder ca. 380 regnefunktioner og næsten 480 regnefunktioner hvis man indlæser alle tilføjelses-programmerne. Hvis disse regnefunktioner ikke dækker dit behov, kan du konstruere dine egne funktioner. Essensen i en funktion er, at den returnere en værdi. En funktion uden argumenter Nedenstående funktion kræver ingen argumenter Function Bruger() Returnere navnet på den registrerede bruger Bruger = Application.UserName End Function Hvis du indtaster nedenstående formel i en regnearkscelle, vil du se navnet på den registrerede bruger: =Bruger() Excel XP VBA.doc Ver. 2 2003 F.M.T. 97

URegnefunktioner Microsoft Excel XP - Makroer med VBA En funktioner med et argument Nedenstående funktion kræver ét argument Function Kommission(Salg) Beregner kommission Lav = 0.10 Mellem = 0.15 Høj = 0.25 Select Case Salg Case < 100000: Kommission = Salg * Lav Case < 500000: Kommission = Salg * Mellem Case Is >= 501000: Kommission = Salg * Høj End Select End Function Ovenstående funktion krævet ét Argument, nemlig Salg. Afhængig af værdien af Salg, beregnes kommission efter satsen Lav, Mellem eller Høj. 98 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA URegnefunktioner En funktion med to argumenter Nedenstående funktion kræver to argumenter Function Kommission2(Salg, Produkt) Beregner kommission Lav = 0.10 Mellem = 0.15 Høj = 0.25 Beregner Produkt Hof = 0.05 Tuborg = 0.07 Faxe = 0.04 Select Case Salg Case < 100000: Kommission2 =Lav Case < 500000: Kommission2 = Mellem Case Is >= 501000: Kommission2 = Høj End Select Select Case Produkt Case Hof : Kommission2 = Kommission2 + Hof Case Tuborg : Kommission2 = Kommission2 + Tuborg Case Faxe : Kommission2 = Kommission2 + Faxe End Select Kommission2 = Salg * Kommission2 End Function Figur 41 viser et eksempel på anvendelsen af denne funktion. Figur 41 Excel XP VBA.doc Ver. 2 2003 F.M.T. 99

URegnefunktioner Microsoft Excel XP - Makroer med VBA En funktion med et område som argument Nedenstående funktion beregner gennemsnitsværdien for N antal celler i et område. Hvis du eksempelvis vil kende gennemsnit for de 5 højeste salgstal, men området indeholder 400 salgstal, kan du avende nedenstående funktion Function HøjesteGennemsnit(Område, N) Returnerer gennemsnit for højeste N værdier i området Værdi = 0 For i = 1 to N Værdi = Værdi + Application.WorksheetFunction.Large(Område, i) Next i HøjesteGennemsnit = Værdi / N End Function I Figur 42 er funktionen anvendt i celle F2. Område er defineret til celle E2:E8, hvor det kun er de 4 højeste tal som skal beregnes. Figur 42 I de viste funktioner med argumenter, er alle argumenterne påkrævet. Der kan imidlertid opstå situationer, hvor du ønsker at anvende valgfri argumenter. 100 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA URegnefunktioner En funktion med valgfri argument Nedenstående funktion vil udvælge et tilfældigt tal fra et område. Hver gang der foretages nye beregninger i regnearket, vil cellen vise en ny værdi det vil sige at cellen genberegnes. Det skal her være muligt, at definere om funktionen skal vise nye værdier, dersom arket genberegnes. Function VælgTilfældig(Område, Optional Genberegn) Tildeler værdien 0, hvis andet argument ikke udfyldes If IsMissing(Genberegn) Then Genberegn = 0 Genberegn regnearket, hvis der foretages ændringer, og Genberegn = 1 If Genberegn = 1 Then Application.Volatile True Udvælger en tilfældig celle VælgTilfældig = Område(Int((Område.Count) * Rnd + 1)) End Function Du anvender nøgleordet Optional for at angive om et argument er valgfrit. Metoden Volatile angiver om cellen (brugerfunktionen) skal genberegnes, når der opstår ændringer i regnearket. Metoden kan kun anvendes i brugerfunktioner. Excel XP VBA.doc Ver. 2 2003 F.M.T. 101

URegnefunktioner Microsoft Excel XP - Makroer med VBA 102 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UI gang med VBA 17. I gang med VBA Figur 43 Navngivning af makroer Du må navngive dine makroer med op til 80 karakter. Makronavnet må ikke starte med et tal, og det må ikke indeholde mellemrum eller symboler. Du kan eksempelvis døbe en makro der skal indsætte en ramme omkring tal, som: indsætrammeomtal Men makronavnet vil være nemmere at læse hvis du i stedet skriver: IndsætRammeOmTal Sådan indspilles en makro Nedenstående eksempel viser hvorledes du opretter en makro, som indrammer et område af tilfældige tal. Indtast de tal, formler eller tekster som skal indrammes. Markér området med musen eller tastaturet. Excel XP VBA.doc Ver. 2 2003 F.M.T. 103

UI gang med VBA Microsoft Excel XP - Makroer med VBA Figur 44 Aktivér menuen Funktioner/Makro/Indspil ny makro. Excel viser dialogboksen for Indspil makro. Det er her meningen, at du navngiver makroen med et sigende navn, vælger hvor makroen skal gemmes og indsætter en passende beskrivelse for makroen. Udfyld den viste dialogboks som vist nedenfor og klik på OK knappen: Figur 45 Excel viser nu en værktøjslinje på skærmen. Det er meningen, at du skal klikke på knappen Stop indspilning, når du vil standse makroindspilningen. 104 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UI gang med VBA Figur 46 Klik på denne knap når du vil standse indspilningen Relativ indspilning af cellereferencer Aktivér menuen Formater/Celler og klik på fanen Ramme. Vælg i rullelisten for farve, den røde farve i paletten, som vist nedenfor. Excel XP VBA.doc Ver. 2 2003 F.M.T. 105

UI gang med VBA Microsoft Excel XP - Makroer med VBA Figur 47 Vælg denne farve Markér derefter i dialogboksen, de indstillinger som er vist nedenfor du skal vælge den viste stregtype og klikke på Kontur: 106 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UI gang med VBA Figur 48 Afslut dialogboksen med OK knappen. Stop derefter indspilningen. Excel viser nu en ramme omkring de markerede celler. Figur 49 Excel XP VBA.doc Ver. 2 2003 F.M.T. 107

UI gang med VBA Microsoft Excel XP - Makroer med VBA Indspilning med relativ cellereference Hvis din makro skal registrere relative cellereferencer, skal du i Værktøjslinjen Indspil makro klikke på knappen Relativ reference. Figur 50 Anvend relative referencer Figur 51 Knappen lyser når den er aktiveret NB! Hvis du anvender relativ reference, vil Excel registrere hvor mange rækker og kolonner du flytter din markør. Hvis du ikke anvender relativ reference og du flytter markøren, vil den aktive celle betragtes som en konstant, og makroen vil altid flytte til dette bestemte punkt. Dette gælder kun hvis du flytter markøren under indspilningen. Du skal nu se den VBA-kode, som Excel har oprettet. Tast [Alt]+[F11] for at aktivere Visual Basic vinduet. 108 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UI gang med VBA Figur 52 VBA koden gemmes i Moduler Du kan selv skrive VBA koden i dette vindue Afspil en makro Du kan afprøve din makro ved at aktivere den fra menuen Funktioner/Makro/Makroer. Markér navnet på den makro, du vil afspille, og klik på knappen Afspil. Du kan også afspille din makro ved hjælp af genvejstasten [Ctrl]+[r]. Denne genvejstast blev defineret, da makroen blev navngivet se Figur 45 på side 104. Tilføj en makro til værktøjslinjen Du føjer en makro til værktøjslinjen, eksempelvis Formatering værktøjslinjen, således: Højreklik med musen på en af de viste værktøjslinjer og vælg Tilpas. Excel viser nedenstående dialogboks: Excel XP VBA.doc Ver. 2 2003 F.M.T. 109

UI gang med VBA Microsoft Excel XP - Makroer med VBA Figur 53 Aktivér fanen Kommandoer og vælg kategorien Makroer. Figur 54 Klik på Rediger markering, for at tilføje en makro til en trykknap Markér Brugerdefineret knap under listen Kommandoer. Hold mustasten nede og træk musen op i værktøjslinjen. 110 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UI gang med VBA Figur 55 Træk makroen op i værktøjslinjen Excel viser nu makroknappen i værktøjslinjen. Klik på knappen Redigér markering og vælg punktet Tildel makro. Figur 56 Hvis du vil ændre navnet på knapfladen, skal du klikke på knappen Redigér markering, som vist i næste billede. Excel XP VBA.doc Ver. 2 2003 F.M.T. 111

UI gang med VBA Microsoft Excel XP - Makroer med VBA Vis makronavnet på knapfladen Figur 57 Når du peger på knappen, vil navnet blive vist som et værktøjstip. Figur 58 Dette navn blev indtastet i Figur 57. Sådan virker makroindspilningen Når du indspiller en makro, vil Excel registrere alle de hændelser, du udfører i programmet og i dokumentet. Når du indspiller en makro som IndsætRamme, vil Excel registrere alle de indstillinger, som vises i dialogboksen Formater celler/ramme. 112 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UI gang med VBA Figur 59 Indstillingerne i denne dialogboks. Figur 60 registreres i kodevinduet Excel XP VBA.doc Ver. 2 2003 F.M.T. 113

UI gang med VBA Microsoft Excel XP - Makroer med VBA Figur 61 Sådan gøres makroen hurtigere Den kode, du ser i Figur 60, viser de indstillingsmuligheder, du har aktiveret i dialogboksen Ramme. Teksten xlnone betyder, at du ikke har aktivéret den valgte indstilling. En kommentar er en makrokode, som starter med en apostrof [ ]. Aktivér værktøjslinjen Edit og klik på knappen Comment Block for at ændre en linje. Værktøjslinjen Edit Markér disse to linjer og klik på Kommentar Figur 62 viser koden for IndsætRamme. Du kan ved hjælp af apostroffen i venstre margen se hvilke linjer, der er kommentarer. 114 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UI gang med VBA Figur 62 Apostroffen angiver, at koden er ændret til en kommentar. Dermed afspilles den ikke. Indrykket tekst øger læsbarheden Du kan øge hastigheden for afspilningen af makroen ved at udelade kode, som ikke anvendes, samt ved at deaktivére opdateringen af skærmen, mens makroen udføres. Deaktivér skærmopdateringer Du kan øge hastigheden af en makro ved at forhindre opdatering af skærmen, mens makroen afspilles. Du kan i hjælpen til Visual Basic se, hvorledes du forhindrer opdatering af skærmen. Aktivér Hjælp fra VBA-vinduet. Klik på fanen Indeks og skriv Screen. Hjælpen viser nu forskellige emner under punkt 3. Vælg ScreenUpdating og klik på Søg. Egenskaben ScreenUpdating anvendes til at gentegne skærmen. Excel XP VBA.doc Ver. 2 2003 F.M.T. 115

UI gang med VBA Microsoft Excel XP - Makroer med VBA Figur 63 Hjælpen viser nu et nyt skærmbillede, hvor du kan se et eksempel på anvendelsen af udtrykket ScreenUpdating. Luk hjælpen og aktivér kodevinduet. Indsæt nedenstående kode øverst i makroen. Application.ScreenUpdating = False Indsæt derefter denne kode nederst i makroen. Application.ScreenUpdating = True. Afprøv makroen. Du vil i øvelserne til materialet, udføre en øvelse som gør denne makro hurtigere. 116 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UManuel konstruktion af makroer 18. Manuel konstruktion af makroer Til trods for, at indspilning af makroer er den hurtigste og nemmeste måde at lære VBA på, vil der komme et tidspunkt, hvor du er tvunget til at programmere makrokoden manuelt. Dette kapitel viser dig forskellige eksempler på programmering med VBA som kan hjælpe i dagligdagen. Aktivering af specifik fane i et regneark Nedenstående kode vil aktivere fanen Ark2 i den aktive projektmappe og placere markøren i celle A3. Sub AktiverArk2CelleA3() Sheets( Ark2 ).Select Range( A3 ).Select End Sub Sumformel for areal Nedenstående kode viser hvorledes du i Ark2 flytter markøren til celle A3 og opretter en sumformel som summere celle B8:C11. Absolut cellereference Sub SummerCellerAbsolut() Sheets( Ark2 ).Select Range( A3 ).Select ActiveCell.Formula = =SUM(B8:C11) End Sub Ovenstående kode anvender absolutte referencer hvor nedenstående kode anvender relativ referencer. Relativ cellereference Sub SummerCellerRelativ() Sheets( Ark2 ).Select Range( A3 ).Select ActiveCell.FormulaR1C1 = =SUM(R[5]C[1]:R[8]C[2]) End Sub Bemærk at ovenstående formel anvender R1C1 notationen. Excel XP VBA.doc Ver. 2 2003 F.M.T. 117

UManuel konstruktion af makroer Microsoft Excel XP - Makroer med VBA NB! Hvad gør nedenstående kode? Sub SummerCellerRelativTilbage() Sheets( Ark2 ).Select Range( D16 ).Select ActiveCell.FormulaR1C1 = =SUM(R[-5]C[-1]:R[-8]C[-2]) End Sub Marker en hel kolonne Nedenstående kode viser hvorledes du markerer kolonne H i Ark2. Sub MarkerKolonneH() Sheets( Ark2 ).Select Columns( H:H ).Select End Sub Indsæt søgesti i sidefod Excel giver ikke som Word mulighed for at indsætte søgestien for den aktive fil i sidefoden. Søgestien kan dog indsættes i en celle ved hjælp af regnefunktionen =INFO( BIBLIOTEK ) eller ved hjælp af regnefunktionen =CELLE( FILNAVN ) Nedenstående kode viser hvorledes værdien for den aktive fils navn og mappe indsætte i venstre sidefod i 8 punkt skriftstørrelse. Sub IndsætBibliotekSidefod() ActiveSheet.PageSetup.LeftFooter = &8 & Active_ Workbook.FullName End Sub Nedenstående kode vil indsætte søgestien i sidefoden og udskrive det aktive ark. Makroen kan tilknyttes værktøjsknappen Udskriv i Standard værktøjslinjen. Sub ErstatUdskriv() Tip! ActiveSheet.PageSetup.LeftFooter = &8 & Active_ Workbook.FullName ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub Tilknyt ovenstående kode til værktøjsknappen Udskriv. 118 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UManuel konstruktion af makroer Udføre en handling på flere celler med en løkke Nedenstående kode viser hvorledes værdien 25 indsættes i 20 celler under hinanden. Antallet af celler som udfyldes kontrolleres med en Do While instruktion. For at flytte markøren til cellen nedenunder, anvendes metoden Selection.Offset(x,x). Sub UdfyldCeller() Dim Tæller As Byte Cells(2, 4).Select Do While Tæller < 20 Tæller = Tæller + 1 If IsEmpty(Selection) Then Selection.Value = 25 Selection.Offset(1, 0).Select Else Exit Sub End If Loop End Sub Udvide Excels funktionalitet Excel giver mulighed for, via menuen Rediger/Ryd, blandt andet at slette celleindhold eller formater men der er ikke mulighed for at slette formler. Excel XP VBA.doc Ver. 2 2003 F.M.T. 119

UManuel konstruktion af makroer Microsoft Excel XP - Makroer med VBA Figur 64 Du har ikke mulighed for at slette formler Du vil i nedenstående eksempel se hvorledes du kan oprette to makroer, som du kan anvende til at udvide menuen Ryd. Figur 65 Her er oprettet en gruppe med to nye menupunkter 120 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UManuel konstruktion af makroer Slette formler i et ark Sub SletFormlerArk() 'Makro som sletter formler i de aktive ark Dim Tæller As Long, Y, Z, A, B, L, N, M 'Deklarerer variabler Application.ScreenUpdating = False Range("A1").Select 'markerer celle A1 N = ActiveCell.Address() Selection.SpecialCells(xlCellTypeLastCell).Select 'finder den sidst anvendte celle M = ActiveCell.Address() Range(N, M).Select Y = Selection.Columns.Count 'tæller antallet af anvendte kolonner Z = Selection.Rows.Count 'tæller antallet af anvendte rækker Range(N).Select For B = 1 To Y For A = 1 To Z L = ActiveCell.Value ActiveCell.Value = L Selection.Offset(1, 0).Select Next A Range(N).Select ActiveCell.Offset(0, B).Select Next B Application.ScreenUpdating = True End Sub Slet formler i område Sub SletFormlerOmråde() 'Makro som sletter formler i det markerede område Dim Tæller As Long, Y, Z, A, B, L, N 'Deklarerer variabler Application.ScreenUpdating = False N = ActiveWindow.RangeSelection.Address Range(N).Select Y = Selection.Columns.Count 'tæller antallet af anvendte kolonner Z = Selection.Rows.Count 'tæller antallet af anvendte rækker Range(N).Select Excel XP VBA.doc Ver. 2 2003 F.M.T. 121

UManuel konstruktion af makroer Microsoft Excel XP - Makroer med VBA For B = 1 To Y For A = 1 To Z L = ActiveCell.Value ActiveCell.Value = L Selection.Offset(1, 0).Select Next A Range(N).Select ActiveCell.Offset(0, B).Select Next B Range(N).Select Application.ScreenUpdating = True Figur 66 End Sub Anmod bruger om en værdi Nedenstående kode viser hvorledes du viser en InputBox med en fast tekst (prompt tekst) samt en titeltekst. Hvis titelteksten udelades, kan InputBox aktiveres direkte, i modsat fald skal den knyttes til en variabel, som vist i nedenstående eksempel: Sub VisInputBoxMedTitel() Dim Besked As String Dim Titel As String Dim Variabel As String Besked = Dette er en prompt tekst Titel = Denne linje vises som titeltekst Variabel = InputBox(Besked, Titel) End Sub Ovenstående kode vil vise dette billede: 122 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UManuel konstruktion af makroer Figur 67 Indsæt en værdi fra en InputBox i regnearket Nedenstående kode viser hvorledes du henter en værdi fra regnearket, og viser denne værdi som standardværdi i InputBoxen. Sub VisInputBoxMedStandardværdi() Dim Besked As String Dim Titel As String Dim Standard As String Dim Variabel As String Besked = Dette er en prompt tekst Titel = Denne linje vises som titeltekst Standard = Sheets( Ark2 ).Cells(3,1).Value Variabel = InputBox(Besked, Titel, Standard) Sheets( Ark2 ).Cells(3,1).Value = Variabel End Sub I ovenstående kode er der indsat tre argumenter for InputBoxen, nemlig Besked, Titel og Standard. Værdien Standard kan være et tal eller en tekst. I ovenstående eksempel hentes værdien fra regnearket Ark2, fra celle A3. Hvis brugeren klikker OK vil den indtastede værdi blive returneret til regnearket. Hvis brugeren annuller InputBoxen, vil regnearket modtage en nulværdi, således at celle A3 bliver tom. Excel XP VBA.doc Ver. 2 2003 F.M.T. 123

UManuel konstruktion af makroer Microsoft Excel XP - Makroer med VBA Figur 68 Inputbox InputBox anvendes som en metode eller en funktion. InputBox Function Funktionen InputBox viser en prompt tekst på skærmen, og afventer at brugeren indtaster en tekst eller klikker på en knap, og returnerer en String der indeholder tekstboksens indhold. Hvis du ikke definerer din datatype, vil typen String blive anvendt. Du kan i hjælpen søge på udtrykket Funktionen InputBox, som vist nedenfor: InputBox Method Metoden InputBox viser en dialogboks, som brugeren kan indtaste en værdi i. Metoden returnerer brugerens svar. Metoden InputBox kræver forskellige værdier, blandt andet datatypen for det indtastede. Du kan her anvende de værdier, som er vist i nedenstående hjælpebillede: 124 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UManuel konstruktion af makroer Figur 69 Vis besked i Statuslinjen Du kan vise meddelelser i statuslinjen, når du afspiller en makro. Nedenstående kode vil vise en besked i statuslinjen: NB! Sub VisStatusLinjeTekst() Application.StatusBar = Dette er en meddelelse. Vent venligst! End Sub Du skal nulstille statuslinjen efter du har vist dine beskeder, i modsat fald vises de permanent. Du nulstiller statuslinjen med koden Application.StatusBar = False Vis besked på skærmen Ønsker du at vise en meddelelse på skærmen, skal du anvende funktionen MsgBox. Nedenstående kode viser et eksempel herpå: Excel XP VBA.doc Ver. 2 2003 F.M.T. 125

UManuel konstruktion af makroer Microsoft Excel XP - Makroer med VBA Figur 70 Sub VisBeskedPåSkærmen() MsgBox Dette er en besked End Sub Figur 71 Meddelelsesboks med flere knapper Du kan vise meddelelsesbokse, som viser flere knapper, symboler som spørgsmålstegn samt en tekst i titellinjen, eksempelvis som i nedenstående figur: Ovenstående figur anvender instruktionerne Prompt tekst plus Antal knapper samt Titeltekst. Der er forskel på den kode, som opretter ovenstående Meddelelsesboks, og den kode som blev anvendt i Figur 70. Hvis du konstruere en MsgBox som viser mere end én knap, kræver VBA, at MsgBox knyttes til en variabel som vist nedenfor: Tip! Variabel = MsgBox( Vil du afslutte Excel, 36, AFSLUT _ PROGRAM ) Du kan i hjælpen til MsgBox se hvorledes du opbygger koden. Udfør handling når Excel startes Du kan udføre handlinger når Excel startes. Eksempelvis kan du ved hjælp af en makro sørge for at Excel altid maksimeres. Dette kræver to ting: 126 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UManuel konstruktion af makroer 1. Makroen skal gemmes i den personlige projektmappe, eller i en anden projektmappe, som gemmes i XLStart mappen. 2. Makroen skal knyttes til objektet ThisWorkbook og ikke gemmes i et modul. Du opretter makroen i den personlige projektmappe således: Luk alle aktive regneark i Excel. Opret et nyt regneark, med navnet Person.xls. gem denne fil i mappen XLStart. Slet alle faner, bortset fra Ark1. Tast [Alt]+[F11] for at aktivere Visual Basic vinduet. Markér objektet ThisWorkbook i projektvinduet. Indtast nedenstående kode i kodevinduet, under hændelsen Open. Figur 72 Markér dette objekt Find hændelsen Open Opret denne kode Skift tilbage til Excel. Aktivér menuen Vindue/Skjul. Excel XP VBA.doc Ver. 2 2003 F.M.T. 127

UManuel konstruktion af makroer Microsoft Excel XP - Makroer med VBA Figur 73 Den personlige projektmappe bør altid være skjult når du starter Excel. Justér Excel så programmet ikke fylder hele skærmen. Luk derefter Excel. Når du bliver spurgt om du vil gemme ændringerne i den personlige projektmappe, skal du vælge Ja. Figur 74 Genstart programmet for at se om makroen virker. Makroer som knyttes til hændelser i objektet ThisWorkbook, vises ikke i makrooversigten. 128 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UManuel konstruktion af makroer Figur 75 Du kan ikke se makroer som er knyttet til hændelser i objektet ThisWorkbook i Person.xls ThisWorkbook Objektet ThisWorkbook Du kan med objektet ThisWorkbook oprette makroer, som knyttes til bestemte hændelser, eksempelvis når du åbner en projektmappe. Objektet ThisWorkbook giver adgang til en lang række hændelser, som ikke er tilgængelige for et ark. I et ark, eksempelvis Ark1 (og alle andre ark), har du adgang til hændelserne: Activate BeforeDoubleClick BeforeRightClick Calculate Change Deactivate SelectionChange Hvor du i objektet ThisWorkbook har adgang til hændelserne: Excel XP VBA.doc Ver. 2 2003 F.M.T. 129

UManuel konstruktion af makroer Microsoft Excel XP - Makroer med VBA Activate AddInnInstall AddInnUninstall BeforeClose BeforePrint BeforeSave Deactivate NewSheet Open SheetActivate SheetBeforeDoubleClick SheetBeforeRightClick SheetCalculate SheetChange SheetDeactivate SheetSelectionChange WindowActivate WindowDeactivate WindowResize Alle projektmapper i Microsoft Excel XP indeholder et objekt med navnet ThisWorkbook. Oprette kode i ThisWorkbook Du kan ofte have brug for at lave en procedure, som refererer til for eksempel ark eller celler i den projektmappe, proceduren tilhører, og som kan udføres fra en hvilken som helst anden projektmappe. For at opnå dette, kan du bruge objektet ThisWorkbook. Når du opretter procedurer i ThisWorkbook, vil referencer til objekter (for eksempel ark eller celler) automatisk gælde for den projektmappe, som indeholder proceduren - også når proceduren udføres fra en anden projektmappe. Hvis du derimod placerer en procedure i et modul, vil dens referencer ikke automatisk komme til at gælde for projektmappen, som indeholder proceduren. Eksempel: Projektmappen Test.xls indeholder teksten Dette stammer fra Test.xls i celle A1 på Ark1. Du opretter nu følgende procedure i objektet Modul1: Sub IndsætFraModul() Range( A2 ) = Worksheets( Ark1 ).Range( A1 ).Value End Sub Derefter opretter du samme procedure i objektet ThisWorkbook: 130 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UManuel konstruktion af makroer Sub IndsætFraThisWorkbookl() Range( A2 ) = Worksheets( Ark1 ).Range( A1 ).Value End Sub Hvis du nu åbner en ny projektmappe og i cellen A1 på Ark1 skriver Dette er en lokal tekst, vil der ske følgende ved kørsel af de to procedurer: Proceduren IndsætFraModul vil i celle A2 indsætte teksten Dette er en lokal tekst - den vil altså hente værdien fra den aktuelle projektmappe. Proceduren IndsætFraThisWorkbook vil derimod indsætte teksten Dette stammer fra Test.xls - den vil altså hente værdien fra den projektmappe, som indeholder proceduren. Egenskaben ThisWorkbook Det er imidlertid ikke nødvendigt at anvende objektet ThisWorkbook for at lave denne type referencer. Du kan opnå samme resultat ved at anvende en egenskab, som også hedder ThisWorkbook. Hvis denne egenskab sættes foran referencen til objektet, vil referencen altid gælde et objekt i procedurens egen projektmappe, uanset om proceduren befinder sig i objektet ThisWorkbook eller i et modul. Du kan afprøve dette ved at rette eksemplet ovenfor, proceduren IndsætFraModul til følgende: Sub IndsætFraModul() Range( A2 ) = ThisWorbook.Worksheets( Ark1 ).Range_ ( A1 ).Value End Sub Nu vil de to procedurer virke på samme måde. Egenskaben ThisWorkbook er den eneste måde, en tilføjelse kan referere til sin egen projektmappe på. Egenskaben ActiveWorkbook returnerer ikke tilføjelsens projektmappe, men den projektmappe, der kalder tilføjelsen. Egenskaben Workbooks kan i reglen heller ikke bruges, da navnet på projektmappen normalt ændres (se kapitlet Fejl! Henvisningskilde ikke fundet. på side Fejl! Bogmærke er ikke defineret.), når tilføjelsen oprettes. Egenskaben ThisWorkbook returnerer altid den projektmappe, som koden kører i. Excel XP VBA.doc Ver. 2 2003 F.M.T. 131

UManuel konstruktion af makroer Microsoft Excel XP - Makroer med VBA Erklære flere variabel Du kan erklære flere variabler således: NB! Dim Var1 As Date, Var2 As Date, E As Double, T As Long. Hvor mange af nedenstående variabler er erklæret som date? Figur 76 Dim Var1, Var2 As Date, E As Double, T As Long. Hvis du vil kende datatypen for dine variabler, kan du eksempelvis anvende denne kode: MsgBox VarType(Var2) MsgBox VarType(Var1) Skrive kode som ikke kan vises på én linje Hvis din kodning fylder så meget, at du ikke kan se den på en linje, kan du bryde linjen med en understregning, kaldet en underscore [_]. Du vil ofte i hjælpen se eksempler på kode, som brydes, for at øge læsbarheden. Denne kode brydes i to linjer for at øge læsbarheden 132 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UExcel dialogbokse 19. Excel dialogbokse Du kan anvende de indbyggede dialogbokse i Excel i dine makroer. Nedenstående kode vil vise dialogboksen Funktioner/Indstillinger/Vis. Denne kode viser kun fanen Vis Sub VisDialogboksVis Applications.Dialogs(xlDialogOptionsView).Show End Sub Hvis en dialogboks indeholder flere faner viser systemet kun den fane som du kalder, som vist ovenfor. Figur 77 Excel XP VBA.doc Ver. 2 2003 F.M.T. 133

UExcel dialogbokse Microsoft Excel XP - Makroer med VBA Figur 78 Den indbyggede dialogboks for Funktioner/Indstil linger Du anvender metoden Show til at vise den kaldte dialogboks. Programmet vil derefter udføre de valgte markeringer. Brug af samlingen Dialogs Brug egenskaben Dialogs til at returnere samlingen Dialogs. I følgende eksempel vises antallet af tilgængelige, indbyggede dialogbokse i Microsoft Excel. MsgBox Application.Dialogs.Count Brug Dialogs(Index), hvor Index er en indbygget konstant, som identificerer dialogboksen, til at returnere et enkelt objekt af typen Dialog. I følgende eksempel køres den indbyggede dialogboks Åbn fil. NB! dlganswer = Application.Dialogs(xlDialogOpen).Show Objektbiblioteket Microsoft Excel VBA indeholder indbyggede konstanter til mange af de indbyggede dialogbokse. Hver konstant dannes ud fra præfikset xldialog efterfulgt af navnet på dialogboksen. Konstanten til dialogboksen Anvend navne er for eksempel xldialogapplynames, og konstanten til dialogboksen Find fil er xldialogfindfile. Disse konstanter er medlemmer af opregningstypen XlBuiltinDialog. Det er ikke særlig effektivt at bruge et objekt af typen Dialog til at ændre en værdi, som kan angives med en egenskab eller en metode. 134 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UExcel dialogbokse Tip! Brug metoden Update til at sikre, at værdierne i dialogboksen afspejler de aktuelle værdier. Det kan være nødvendigt at bruge metoden Update, hvis du definerer en dialogboksvariabel i begyndelsen af makroen og senere vil returnere eller ændre de aktuelle indstillinger. Figur 79 Hvad hedder den indbyggede dialogboks Når du kalder de indbyggede dialogbokse, skal du kende navnet på den Excel-kommando, som kalder dialogboksen. Du kan ikke anvende de danske menunavne, men kan i objektoversigten finde de engelske udtryk. Du gør søgningen hurtigere ved at vælge Excel klassebiblioteket Find klassen xldialog Tip! Objektoversigten vil i den højre liste vise navnet på de indbyggede dialogbokse. Yderligere oplysninger om tilgængelige konstanter finder du i hjælpen under Built-In Dialog Box Argument Lists. Excel XP VBA.doc Ver. 2 2003 F.M.T. 135

UExcel dialogbokse Microsoft Excel XP - Makroer med VBA Figur 80 136 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOpret Userforms 20. Opret Userforms Figur 81 Du kan oprette dine egne dialogbokse, som i udséende ligner de indbyggede dialogbokse i Excel. Du kan med fordel anvende egne dialogbokse, når en bruger skal indsætte flere oplysninger i et dokument, og du vil styre, hvor disse oplysninger indsættes. Har du brug for flere oplysninger, end en InputBox kan indeholde, bør du også anvende dialogbokse. Når du opretter en brugerdialogboks, arbejder du med UserForms. Sådan oprettes en UserForm Skift til Visual Basic-vinduet og aktivér menuen Insert/UserForm. Excel viser nu formularen UserForm1 (den næste form hedder 2 og så videre) samt Værktøjskassen, som viser de kontrolelementer, du kan indsætte i formularen. Formularen UserForm1 UserForms vises i projektvinduet Værktøjskasse med kontrolelementer Sådan omdøbes en UserForm Du kan omdøbe en UserForm ved at indtaste et nyt navn i Egenskabsvinduet. Eksempelvis som MinFørsteDialogboks. Excel XP VBA.doc Ver. 2 2003 F.M.T. 137

UOpret Userforms Microsoft Excel XP - Makroer med VBA Figur 82 Du omdøber en UserForm i Egenskabsvinduet Figur 83 Sådan indsættes et kontrolelement Du indsætter kontrolelementer som tekstbokse, etiketter, kommandoknapper og lignende fra værktøjskassen. Hvis du peger på et element i værktøjskassen, vises et værktøjstip med navnet på kontrolelementet. Alle elementer viser et værktøjstip Peg og klik på det ønskede element. Klik derefter i UserFormen for at indsætte elementet. Der er i nedenstående UserForm indsat: 1 Etiket (Label1) 1 Tekstboks (TextBox) 1 Afkrydsningsfelt (Checkbox1) 3 Kommandoknapper (CommandButton 1 3) 138 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOpret Userforms Figur 84 Figur 85 Sådan flyttes et kontrolelement Du flytter et kontrolelement ved at klikke på kanten af elementet. Excel viser en firepilet markør. Du kan flytte et element, når du ser en firepilet markør Hold musen nede og træk elementet til den ønskede position. Excel XP VBA.doc Ver. 2 2003 F.M.T. 139

UOpret Userforms Microsoft Excel XP - Makroer med VBA Figur 86 Skub kontrolelementet til den ønskede position Sæt egenskaben MultiLine=True hvis der skal indtastes flere linjer Figur 87 Sådan ændres størrelsen på elementet eller formularen Du ændrer størrelsen på kontrolelementet eller din UserForm ved at trække i hjørnerne på det markerede objekt. Excel viser markøren som en skråpil. Træk i hjørnerne for at ændre størrelse Sådan aktiveres en UserForm Du skal anvende makrokoden Load og Unload for at indlæse din UserForm i hukommelsen, eksempelvis som: 140 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOpret Userforms Figur 88 Load MinFørsteDialogboks Unload Min FørsteDialogboks Load vil indlæse dialogboksen i hukommelsen. Unload frigøre hukommelsen. Du kan ikke se dialogboksen på skærmen med metoden Load. Dertil skal du anvende metoden Show. Nedenstående kode vil første indlæse dialogboksen i hukommelsen, derefter vil dialogboksen blive vist. Sub VisMinFørsteDialogboks() Load MinFørsteDialogboks MinFørsteDialogboks.Show End Sub Nedenstående kode vil både indlæse og vise dialogboksen. Sub VisMinFørsteDialogboks() MinFørsteDialogboks.Show End Sub Sådan aflæses værdier fra en UserForm Du kan aflæse værdien fra en tekstboks (TextBox) fra egenskaben TextBox.Value. Hvis du eksempelvis aktivérer ovenstående dialogboks, kan du indtaste en værdi i tekstboksen og derefter vise indholdet i en meddelelsesboks (eller indsætte det i dokumentet). Dette udføres således: Højreklik med musen på CommandButton1 og vælg Vis programkode. Excel XP VBA.doc Ver. 2 2003 F.M.T. 141

UOpret Userforms Microsoft Excel XP - Makroer med VBA Figur 89 Højreklik med musen på den første kommandoknap og åbn programvinduet Excel viser Programkodevinduet for kontrolelementet. Kodevinduet for dette kontrolelement Figur 90 Indtast den handling du ønsker udført, ved hændelsen Klik (Click). 142 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOpret Userforms Figur 91 Indtast den kode du ønsker udført.ved hændelsen Klik Opret derefter den kode, som viser dialogboksen. I nedenstående eksempel er der oprettet et separat modul til VBA-koder for User- Forms. Figur 92 Der er her oprettet er separat modul for VBA koderne til User- Forms Nedenstående billede viser dialogboksen, hvor kontrolelementerne viser forklarende tekster. Excel XP VBA.doc Ver. 2 2003 F.M.T. 143

UOpret Userforms Microsoft Excel XP - Makroer med VBA Figur 93 Hvis brugeren aktivérer afkrydsningsfeltet og derefter kommandoknappen Indsæt i dokument, vil den indtastede værdi blive vist i dokumentet med kursiv skrift. Den kode, som udfører ovenstående, er vist nedenfor: Private Sub CommandButton1_Click() MsgBox TextBox1.Value'vis værdi i MsgBox End End Sub Private Sub CommandButton2_Click() If CheckBox1 = True Then'aflæser status for checkbox Selection.Font.Italic = True 'hvis markeret aktivér Kursiv Selection.Value =TextBox1.Value'indsæt tekst Else Selection.Value =TextBox1.Value'indsæt tekst End If End'afslutter dialogboksen End Sub Private Sub CommandButton3_Click() End'afslutter dialogboksen End Sub Du kan i ovenstående eksempel indtaste tekst, tal eller formler i den viste dialogboks, som vist nedenfor. 144 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOpret Userforms Figur 94 Du kan indtaste formler i denne tekstboks Værdien fra ovenstående dialogboks, vil blive vist i kursiv i den aktive celle. I ovenstående billede er celle A6 den aktive celle. Figur 95 Denne formel er indsat i denne celle Du kan vælge om dialogboksen skal vises midt på skærmen, eller midt i Excel vinduet, som vist nedenfor: Excel XP VBA.doc Ver. 2 2003 F.M.T. 145

UOpret Userforms Microsoft Excel XP - Makroer med VBA Figur 96 Dialogboksen vises i midten af Excel vinduet Sæt egenskaber for en UserForm Ved at sætte egenskaben for formularen UserForm1 til CenterOwner bestemmer du at dialogboksen vises i midten af Excel programvinduet. Du ser nedenfor hvor denne egenskab sættes. Figur 97 Du kan sætte værdier for formular egenskaberne 146 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UEn simpel skabelon 21. En simpel skabelon Figur 98 Dette afsnit viser, hvorledes du opretter en skabelon til udarbejdelse af rejseafregninger, som vist i Figur 98. Følgende skal ske med ovenstående skabelon: Når der udarbejdes et nyt regneark efter ovenstående skabelon, skal standard og formaterings værktøjslinjerne skjules, det samme skal formellinjen. Skabelonen skal beskyttes, så der kun kan indtastes tal. Excel XP VBA.doc Ver. 2 2003 F.M.T. 147

UEn simpel skabelon Microsoft Excel XP - Makroer med VBA Når afregningen udskrives, skal farverne på de farvede felter slettes, så afregningen alene udskrives i sort/hvid. De farvede felter gør det dog nemmere at arbejde med afregningen, under udfyldelsen. Figur 99 viser skærmbilledet samt den øverste del af afregningen. Figur 99 Medarbejderen udvælges fra denne rulleliste Datoerne for ugen sættes efter afregningsperioden De farvede felter gør det nemmere at arbejde med afregningen Åbn filen En simpel skabelon.xls filen er placeret på disketten. Aktivér celle B5 og kontroller den formel som er indtastet i cellen. Prøv derefter at ændre perioden i celle B4 til eksempelvis 10-09- 1998. Bemærk at de viste datoer for ugen er tilpasse startperioden. Filen indeholder en række navngivne områder i begge ark. Kontroller disse navneområder. Aktivér værktøjslinjen Formularer og indsæt en Kombinationsboks, som vist i Figur 99. 148 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UEn simpel skabelon Figur 100 Objektet navngives og nummereres Placér Kombinationsboksen her Højreklik på Kombinationsboksen og vælg Formater kontrolelement. Sæt de værdier som er vist nedenfor. Figur 101 Aktivér derefter fanen Egenskaber og vælg at objektet ikke skal udskrives. Excel XP VBA.doc Ver. 2 2003 F.M.T. 149

UEn simpel skabelon Microsoft Excel XP - Makroer med VBA Når du vælger en medarbejder fra området Database i arket medarbejdere, vil rækkenummeret for den valgte værdi blive gemt i celle A3 i arket Rejseafregning. Dette betyder at celle A3 vil vise et tal og ikke teksten Medarbejder nr. Formater celle A3 til Brugerformateringen Medarbejder nr., som vist nedenfor: Figur 102 Celle A9 indeholder også en værdi, nemlig værdien for kørte kilometer, men cellen viser en tekst. Med denne metode undgår du at oprette inputceller til lagring af værdier. Indsæt nedenstående formel i celle B2: =LOPSLAG(A3;Database;2)& &LOPSLAG(A3;Database;3) Ovenstående formel vil hente værdierne for fornavn og efternavn for den valgte medarbejder. Afprøv Kombinationsboksen og markér den første linje, som viser teksten ID. 150 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UEn simpel skabelon Figur 103 Som det vises vil systemet returnere en forkert værdi. Dette skyldes at overskrifterne fra fanen medarbejdere ikke skal vises i Kombinationsboksen. Overskrifterne er dog nødvendige til indtastning af nye medarbejdere i dataformularen. For at løse dette problem, skal der oprettes en makro, som finder størrelsen af den aktuelle database uden overskrifterne. Dette område skal navngives og anvendes til Kombinationsboksen. Aktivér Visual Basic vinduet, og importer modulet Modul1.bas fra menuen File/Import file. Figur 104 Opret derefter en kommandoknap med værktøjslinjen Formularer, til registrering af medarbejdere se Figur 99. Excel XP VBA.doc Ver. 2 2003 F.M.T. 151

UEn simpel skabelon Microsoft Excel XP - Makroer med VBA Tildel makroen RegistrerMedarbejder til denne knap. Afprøv knappen og opret en ny medarbejder. Kontroller derefter af medarbejderen vises i Kombinationsboksen. Opret derefter en Kommandoknap til udskrivning af afregningen, som vist i Figur 99. Figur 105 Denne kode kræver at din Kombinationsboks hedder Rullemenu1 ellers må du rette koden Tildel derefter makroen Rullemenu1_Ændring() til Kombinationsboksen. Denne makro flytter markøren til celle B3, så markøren skjules bagved Kombinationsboksen. Inden skabelonen gemmes, skal du først beskytte fanen Rejseafregning. Gem derefter skabelonen som en XLT fil. 152 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UEn simpel skabelon Figur 106 Skabeloner placeres automatisk i mappen Skabeloner Tip! Hvis du ønsker at værktøjslinjerne Standard, Formatering og formellinjen skal skjules, når du opretter et dokument efter denne skabelon, skal du i Visual Basic vinduet importere klasse-objektet ThisWorkbook fra disketten. Denne fil indeholder den VBA kode som vil skjule ovenstående elementer. Excel XP VBA.doc Ver. 2 2003 F.M.T. 153

UEn simpel skabelon Microsoft Excel XP - Makroer med VBA 154 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UFejlfinding 22. Fejlfinding Figur 107 Du anvender vinduet VærdiKontroludtryk i Visual Basic til at kontrollere værdier i din kode. Nedenstående dialogboks viser en forkert kategori for den indtastede alder. Figur 108 Den kode som er knyttet til Kommandoknappen Test cmdtest er vist nedenfor: Vinduet Watches Sådan tester du et udtryk I ovenstående eksempel er vinduet Watches vist på skærmen dette udføres fra menuen View i Visual Basic. Excel XP VBA.doc Ver. 2 2003 F.M.T. 155

UFejlfinding Microsoft Excel XP - Makroer med VBA Derefter er værktøjslinjen Debug aktiveret. Markøren placeres i linjen med koden Alder = txtalder.text Herefter er der højreklikket med musen og hurtigmenuen Tilføj værdikontrol er aktiveret. Figur 109 Højreklik med musen i denne linje og vælg Add Watch Accepter den viste dialogboks, som vist nedenfor: 156 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UFejlfinding Figur 110 Du ser nu udtrykket Alder i vinduet Watch. Dette betyder at du kan teste på den værdi som brugeren indtaster, for at se om koden afvikles korrekt. Figur 111 Markøren er derefter placeret i begyndelsen af proceduren, og der er klikket på knappen Step Into i værktøjslinjen Debug. Excel XP VBA.doc Ver. 2 2003 F.M.T. 157

UFejlfinding Microsoft Excel XP - Makroer med VBA Figur 112 Markøren placeres i begyndelsen af proceduren, og der klikkes på knappen Step Into Dialogboksen vises nu på skærmen. Figur 113 Udfyld tekstboksen for Alder og klik på knappen Test. Visual Basic returnerer til kodevinduet, og viser en stopmarkering i den første linje. 158 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UFejlfinding Figur 114 Klik to gange på knappen Step Into, for at flytte markøren til koden med IF sætningen, som vist nedenfor: Den værdi som blev indtastet i tekstboksen, vises nu i vinduet Watch, som en gyldig værdi for udtrykket Alder. Figur 115 Denne værdi er knyttet til udtrykket Alder Excel XP VBA.doc Ver. 2 2003 F.M.T. 159

UFejlfinding Microsoft Excel XP - Makroer med VBA Programmet burde nu udføre den sætningen som følger THEN. Det gør programmet ikke. I stedet udføres sætningen efter ELSE. Figur 116 I ovenstående eksempel ligger fejlen i det udtryk som testes i IF sætningen. Sætningen If Alder > 13.. Bør ændres til Breakpoints If Alder >= 13 Du kan indsætte et breakpoint i din kode, ved at klikke med musen i den grå bjælke i venstre margen, som vist nedenfor: 160 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UFejlfinding Figur 117 Klik i margen for at sætte eller fjerne breakpoints Du anvender breakpoints til at standse din kode ved afspilning, så du kan teste eventuelle udtryk. Hvis du peger med musen på Variablen i kodevinduet, vil systemet vise værdien af udtrykket, som vist nedenfor: Figur 118 Peg med musen på udtrykket, for at aflæse værdien Excel XP VBA.doc Ver. 2 2003 F.M.T. 161

UFejlfinding Microsoft Excel XP - Makroer med VBA Tip! Husk at slette dine Watches, når du er færdig med at teste din kode dette udføres ved at højreklikke med musen i vinduet Watch. 162 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer 23. Oprette egne værktøjslinjer Figur 119 Når du opretter værktøjslinjer i Excel, vil dine indstillinger blive gemt i en fil som navngives: C:\Windows\Brugernavn.xlb Du kan imidlertid også tilknytte en værktøjslinje til en projektmappe, hvilket udføres fra Tilpas/Værktøjslinjer. Figur 120 Hvor du vælger knappen Vedhæft. Hvis du ikke vedhæfter en værktøjslinje til en projektmappe, vil indstillingerne blive gemt i?.xlb filen hvilket imidlertid kan give følgende problem. Excel XP VBA.doc Ver. 2 2003 F.M.T. 163

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Hvis en brugerdefineret menu eller værktøjsknap tilføjes en makro, vil knappen fortsat blive vist i Excel, selvom du lukker den fil som indeholder makroen. Hvis du efterfølgende aktiverer menuen eller knappen, vil makrofilen blive åbnet. Løsningen på dette problem er i stedet at vedhæfte værktøjslinjen til projektmappen, eller at programmere oprettelsen og nedlæggelsen af værktøjslinjen, ved hjælp af VBA. Nedenstående kode viser er eksempel på nedlæggelse af en værktøjslinje med navnet Budgetter. Public Sub Slet_Værktøjer() Dim foundflag, cb foundflag = False For Each cb In CommandBars If cb.name = "Budgetter" Then foundflag = True End If Next cb If foundflag Then Application.CommandBars("Budgetter").Delete End If Application.StatusBar = False End Sub Ovenstående kode kaldes når projektmappen lukkes. Nedenstående kode viser et eksempel på oprettelse af en værktøjslinje med navnet Budgetter. 164 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Public Sub Opret_Værktøjer() On Error Resume Next Dim foundflag, cb foundflag = False For Each cb In CommandBars If cb.name = "Budgetter" Then foundflag = True End If Next cb If Not foundflag Then Dim NewMenuBar As CommandBar Dim NewButton As CommandBarButton Dim NewComboBox As CommandBarComboBox Set NewMenuBar = Application.CommandBars.Add(Name:="Budgetter") Set NewButton = NewMenuBar.Controls.Add(msoControlButton) With NewButton.FaceId = 3274.Caption = "Skjul &Konti".OnAction = "Gennemløb_Celler".Style = msobuttoniconandcaption.width = 80 End With Set NewButton = NewMenuBar.Controls.Add(msoControlButton) With NewButton.FaceId = 2174.Caption = "Vis alle konti".onaction = "Udfold_Ark".Style = msobuttoniconandcaption.width = 80 End With Set NewButton = NewMenuBar.Controls.Add(msoControlButton) With NewButton.FaceId = 3276.Caption = "Skjul Ark".OnAction = "Gennemløb_Ark".Style = msobuttoniconandcaption.width = 80 End With Set NewButton = NewMenuBar.Controls.Add(msoControlButton) With NewButton.FaceId = 2595.Caption = "Vis alle ark".onaction = "Vis_Alle_Ark" Excel XP VBA.doc Ver. 2 2003 F.M.T. 165

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA.Style = msobuttoniconandcaption.width = 80 End With Set NewButton = NewMenuBar.Controls.Add(msoControlButton) With NewButton.FaceId = 2473.Caption = "Skift årstal".onaction = "Skiftårstal".Style = msobuttoniconandcaption.width = 80 End With Set NewComboBox = NewMenuBar.Controls.Add(msoControlComboBox) With NewComboBox.Caption = "Vælg regnskab".width = 200.AddItem "Vælg regnskab".additem "Budget " & UseYear & "-0".AddItem "Budget " & UseYear & "-1".AddItem "Prognose " & UseYear.AddItem "Periodisering budget " & UseYear & "-1".AddItem "Periodisering prognose " & UseYear.ListIndex = 1 End With NewComboBox.OnAction = "Regnskab" NewMenuBar.Visible = True NewMenuBar.Position = msobartop End If End Sub Ovenstående kode kaldes når projektmappen åbnes. FaceID FaceID identificere den knapflade som skal vises på en knap. OnAction OnAction kalder den rutine som efterfølgende angives. 166 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelser Excel XP VBA.doc Ver. 2 2003 F.M.T. 167

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 168 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 1 Formål Denne øvelse viser hvorledes du kommer i gang med VBA programmering. Henvisninger Følg øvelsen instruktionerne vises i øvelsen. Øvelse Start Excel XP og gem Mappe1 under navnet VBA i Microsoft Excel XP. Aktivér fanen Ark1. Indtast nogle vilkårlige tal i celleområde A4:C5. De indtastede værdier skal nu indrammes med en rød ramme denne handling skal gemmes i en makro. Markér de indtastede værdier og aktivér menuen Funktioner/Makro/Indspil ny makro. Figur 121 Markér celle A4:C5. Tast 45, hold [Ctrl] tasten nede og tast [Enter]. Excel indsætter nu tallet 45 i de markerede celler. Excel viser nu dialogboksen for Indspil makro. Excel XP VBA.doc Ver. 2 2003 F.M.T. 169

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Figur 122 Figur 123 Udfyld dialogboksen, som vist nedenfor: Indtast de viste tekster. Bemærk at der ikke må være mellemrum i makronavnet. Excel viser nu værktøjslinjen Stop Indspilning på skærmen. Statuslinjen viser ligeledes at du er ved at indspille en makro. Aktivér menuen Formater/Celler. Klik på fanen Ramme. Opret nedenstående dialogboks. 170 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Figur 124 Vælg denne stregtype Vælg farven Rød. Klik på Kontur og afslut med OK knappen. Figur 125 Stop derefter indspilningen af makroen ved at klikke på knappen Stop Indspilning. Klik her for at stoppe indspilningen. Flyt markøren væk fra det markerede område, for at se om der er indsat en rød ramme. Tast [Ctrl]+[r] for at afprøve makroen på den aktive celle. Flyt igen markøren til en ny celle. Afprøv derefter makroen fra menuen Funktioner/Makro/Makroer. Excel XP VBA.doc Ver. 2 2003 F.M.T. 171

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Figur 126 Markér makroen og klik på knappen Afspil. Beskrivelsen fra Figur 123 vises her. Tip! Hvis du vil ændre genvejstasten, som blev oprettet i Figur 123 skal du klikke på knappen Indstillinger i ovenstående dialogboks. Figur 127 172 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 2 Formål Redigering af makrokoder. Henvisninger Sådan virker makroindspilningen side 112. Sådan gøres makroen hurtigere - side 114. Deaktivér skærmopdateringer side 115. Øvelse Tast [Alt]+[F11] for at åbne Visual Basic vinduet. Redigér makrokoden, så dit modul kun indeholder den kode, som er nødvendig for at kunne indsætte en rød ramme i den valgte stregtype. Start med at indsætte en apostrof foran den kode du vil udelade. Afprøv derefter makroen. Indsæt i modulet en kode, som forhindre skærmen i at blive opdateret, mens makroen kører. Redigér makroen, så genvejstasten ændres til [Ctrl]+[Skift]+[R]. Tilpas kommentaren i makrokoden, så den viser den rigtige genvejstast. Gem filen med ændringerne. Excel XP VBA.doc Ver. 2 2003 F.M.T. 173

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 174 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 3 Formål Du skal i denne øvelse oprette en personlig makroprojektmappe, som skal indeholde de makroer, du kan anvende i alle regneark, samt de funktioner du opbygger. Henvisninger Følg øvelsen instruktionerne vises i øvelsen. NB! Øvelse Luk filen VBA i Microsoft Excel XP. Opret et nyt regneark. Slet fanerne Ark2 og Ark3. Gem den nye fil med navnet Person.xls. Filen skal gemmes i mappen XLStart se side 31. De filer du gemmer i denne mappe, vil automatisk blive åbnet, når du starter Excel derfor hedder mappen XLStart. Aktivér Visual Basic vinduet. Aktivér menuen Tools/Options. Klik på fanen Editor og markér afkrydsningsfeltet Require Variabel Declaration, så det viser en markering. Du sikrer dig hermed at dine variabler skal erklæres, ligeledes undgår du stavefejl når du anvender variabler. Højreklik med musen i projektvinduet på objektet ThisWorkbook. Vælg derefter hurtigmenuen View Code. Excel viser nu kodevinduet. Klik med musen i den rulleliste, som viser teksten (General) og vælg objektet Workbook. Excel gætter at du vil skabe en makro, til hændelsen Open, hvilket er korrekt i dette tilfælde. Excel XP VBA.doc Ver. 2 2003 F.M.T. 175

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Figur 128 Vælg objektet Workbook. Hændelsen Open Workbook Figur 129 Indtast nedenstående kode i modulet. Anvend kun små bogstaver, som vist nedenfor. NB! Klik derefter på knappen Save i værktøjslinjen. Hvis du har indtastet koden korrekt, vil koden blive vist med stort begyndelsesbogstav på hvert ord, som vist i Figur 130. Variabler vises ikke med stort begyndelsesbogstav, medmindre de er erklæret sådan. Figur 130 Hvis koden vises med små bogstaver, efter den er gemt, er der lavet en skrivefejl. Luk Visual Basic vinduet. 176 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Figur 131 Da denne fil altid startes, når du starter Excel, bør du skjule filen. Aktivér derfor i Excel, menuen Vindue/Skjul for at skjule denne projektmappe. Justér størrelsen af Excel, så programmet ikke fylder hele skærmen. Justér størrelsen på Excel, så programmet ikke fylder hele skærmen Figur 132 Afslut derefter Excel. Svar ja til at gemme ændringerne i den personlige projektmappe. Start igen Excel, for at se om programmet åbnes maksimeret. Excel XP VBA.doc Ver. 2 2003 F.M.T. 177

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 178 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 4 Formål Denne øvelse viser hvorledes du opretter en Brugerfunktion, til beregning af kvadratet for en flade. Funktionen kan anvendes i alle regneark, da den gemmes i Person.xls. Henvisninger Følg øvelsen instruktionerne vises i øvelsen. Øvelse Tast [Alt]+[F11] for at aktivere Visual Basic. Visual Basic vinduet viser nu objekterne Mappe1 samt Person.xls i projektvinduet. Aktivér objektet Person.xls. Højreklik med musen på objektet og vælg Insert/Module. Omdøb det indsatte modul til Makroer. Indsæt igen et modul, og omdøb modulet til Funktioner. Åbn kodevinduet for modulet Funktioner. Klik med musen i kodevinduet. Aktivér derefter menuen Insert/Procedure. Opret en Function med navnet Kvadrat og klik på OK knappen: Excel viser nu dette billede: Figur 133 Indsæt nedenstående kode i modulet. Excel XP VBA.doc Ver. 2 2003 F.M.T. 179

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Figur 134 Skift til Excel, til Mappe1. Indtast i celle A1 værdien 5, og i celle B1 værdien 6. Placér markøren i celle C1 og klik herefter på knappen Indsæt Funktion. Find kategorien Brugerdefineret i rullelisten for funktionskategorier. Excel viser nu i højre side af dialogboksen, funktionen Kvadrat. Figur 135 Udfyld dialogboksen, som vist nedenfor: 180 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Figur 136 Du har her lært at oprette en brugerfunktion, som kan anvendes i alle regneark. Excel XP VBA.doc Ver. 2 2003 F.M.T. 181

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 182 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 5 Formål Denne øvelse viser hvorledes du opretter en makro, som kan anvendes i alle regneark. Makroen skal tilknyttes en trykknap i værktøjslinjen. Henvisninger Følg øvelsen instruktionerne vises i øvelsen. Tilføj en makro til værktøjslinjen - side 109. Figur 137 Øvelse Skift til Excel og start makroindspilningen. Makroen skal indspilles i Person.xls og døbes VisSkjulFormler. Indspil en makro, som viser formler på skærmen. Du skal mens makroen indspilles, aktivere menuen Funktioner/Indstillinger. Klikke på fanen Vis og aktivere afkrydsningsfeltet Formler. Stop indspilningen. Skift til Visual Basic. Når du indspiller en makro, vil Visual Basic altid oprette et nyt modul. Klip koden ud af Modul1 og indsæt koden i modulet Makroer. Slet derefter modulet Modul1 uden at gemme det dette gør du ved at højreklikke med musen på modulet. Excel XP VBA.doc Ver. 2 2003 F.M.T. 183

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Figur 138 Højreklik på et objekt, hvis du vil slette det. Figur 139 Tilpas koden, efter nedenstående billede: Skift til Excel. Tilføj en knap til Standard værktøjslinjen, som er knyttet til makroen VisSkjulFormler du kan på side 109 se hvorledes du tilføjer knapper til værktøjslinjen. 184 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Figur 140 Knappen er indsat ved siden af Indsæt Funktion. Afprøv i Mappe1 om makroen skifter mellem at vise og skjule formler. Excel XP VBA.doc Ver. 2 2003 F.M.T. 185

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 186 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 6 Formål Denne øvelse viser hvorledes du ændrer knappen Udskriv, så den knyttes til en makro. Henvisninger Følg øvelsen instruktionerne vises i øvelsen. NB! Øvelse Aktivér i Visual Basic Person.xls. Opret nedenstående makro i modulet Makroer. Sub ErstatUdskriv() ActiveSheet.PageSetup.LeftFooter = &8 & _ ActiveWorkbook.FullName ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub Ovenstående kode, som er beskrevet på side 118 indsætter søgestien og filnavnet i sidefodens venstre sektion. Tilknyt ovenstående makro til knappen Udskriv i Standard værktøjslinjen. Tildel makroen genvejstasten [Ctrl]+[p]. Afprøv makroen på Mappe1. Hvis en makro tildeles en genvejstast, som konflikter med en indbygget genvejstast (for eksempel [Ctrl]+[c] = Kopiér), vil makroens genvejstast være den gældende. Excel XP VBA.doc Ver. 2 2003 F.M.T. 187

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 188 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 7 Formål Du skal i denne øvelse oprette en makro, som tester en betingelse. Samtidig skal makroen vise forskellige meddelelsesbokse på skærmen. Henvisninger Fejl! Henvisningskilde ikke fundet. side Fejl! Bogmærke er ikke defineret.. Figur 141 Øvelse Åbn mappen VBA i Microsoft Excel XP. Aktivér modulet for denne mappe. Opret en makro med navnet Løn. Makroen skal vise nedenstående meddelelsesbokse. Tip! Hvis din MsgBox viser andet end Prompt teksten, skal den knyttes til et udtryk. De viste dialogbokse viser alle en titel, og skal derfor alle knyttes til en variabel. Løs opgaven, så du kun anvender 2 variabler med navnet Svar1 og Svar2. Excel XP VBA.doc Ver. 2 2003 F.M.T. 189

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Hvilken datatype vil du tildele dine variabler? Notér svaret nedenfor. 190 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 8 Formål Definere korrekte datatyper. Henvisninger Følg øvelsen instruktionerne vises i øvelsen. Øvelse Opret i modulet til VBA i Microsoft Excel XP nedenstående makro. Sub TestVariabelErklæring() Const Elementer = 20000000 Dim Var1 As Date, Var2 As Date, E(Elementer) As Double,_ T As Long Var1 = Time For T = 1 to Elementer E(T) = 10 Next Var2 = Time MsgBox Det tog & DateDiff( s, Var1, Var2) & sekunder. End Sub Afprøv ovenstående kode og ændrer derefter datatypen for E og T med andre datatyper. Koden opretter et Array på 20.000.000 elementer, som hver tildeles værdien 10. Tiden aflæses på systemet, inden løkken udføres, hvorefter tiden aflæses igen. Den varighed, som ligger mellem de to tidsintervaller, vises i sekunder i en meddelelsesboks. Figur 142 Løkken udføres ved hjælp af en For Next instruktion. Excel XP VBA.doc Ver. 2 2003 F.M.T. 191

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Nogle variabeltyper har specielle tegn, der gør det nemmere at oprette variabler. Disse er vist nedenfor: Variabeltype Tegn Integer % Long Single! Double # Currency String $ Anvend ovenstående symboler til dine erklæringer. Afprøv makroen. Test derefter ved hjælp af ScreenUpdating om makroen kan gøres hurtigere (beskrives på side 115). & @ 192 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 9 Formål Anvende hjælpen i Excel Visual Basic. Henvisninger Anvend hjælpen til Excel Visual Basic. Øvelse Aktivér hjælpen for Excel Visual Basic. Søg på udtrykket BorderAround. Redigér makroen RødRamme, så makroen kun viser én linje kode. Du skal anvende udtrykket BorderAround i koden. Koden skal stadig anvende den oprindelige stregtype samt farve. Afprøv makroen. Excel XP VBA.doc Ver. 2 2003 F.M.T. 193

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 194 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 10 Formål Starte Excel med Standard værktøjslinjen synlig. Henvisninger Følg øvelsen instruktionerne vises i øvelsen. Figur 143 Øvelse Aktivér objektet ThisWorkbook for Person.xls. Tilføj nedenstående kode til hændelsen Open. Tilføj den kode som vises herfra og nedefter Skift til Excel. Skjul værktøjslinjerne og afslut Excel. Genstart Excel for at se om makroen virker. Excel XP VBA.doc Ver. 2 2003 F.M.T. 195

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 196 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 11 Formål Håndtere fejl under kørsel af makroer. Som det blev vist i øvelse 10, kan du med fordel anvende udtrykket NOT til at teste en betingelse. Du skal i denne øvelse gøre en makro hurtigere ved hjælp af NOT. Henvisninger Følg øvelsen instruktionerne vises i øvelsen. Figur 144 Øvelse Aktivér modulet makroer i Person.xls. Redigér makroen VisSkjulFormler til nedenstående udtryk: Skift til Mappe1. Indtast nogle vilkårlige tal i et sammenhængende område. Markér området og tast [F11] for at oprette er separat diagramark for de markerede tal. Afprøv makroen VisSkjulFormler (husk du har en trykknap til denne makro). Når du afprøver makroen VisSkjulFormler i et diagram, vil Excel vise en fejl. Excel XP VBA.doc Ver. 2 2003 F.M.T. 197

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Figur 145 Figur 146 Dette skyldes at det ikke er et regneark som er aktivt. Redigér koden for VisSkjulFormler til nedenstående: Indsæt denne fejlhåndtering Indsæt denne etiket Ovenstående kode anvender udtrykket On Error GoTo. I dette tilfælde flyttes instruktionen til en etiket (Label) med navnet Fejl. NB! Da der ikke følger nogen instruktioner efter etiketten fejl, afsluttes makroen. Etiketter skal altid afsluttes med et kolon [:], ellers opstår der fejl. Afprøv igen makroen på diagramarket i Mappe1. Hvis makroen virker tilfredsstillende, kan du slette diagramarket. 198 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 12 Formål Arbejde med løkker og betingelser. Denne øvelse viser hvorledes du udføre en handling et bestemt antal gange. Henvisninger Følg øvelsen instruktionerne vises i øvelsen. Figur 147 Øvelse Opret i modulet til VBA i Microsoft Excel XP nedenstående makro: Ovenstående kode udfører følgende: Markøren placeres i celle D2 i Ark3. Hvis den aktive celle er tom, indsættes værdien 25, derefter flyttes markøren til næste række i den samme kolonne. Excel XP VBA.doc Ver. 2 2003 F.M.T. 199

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Så længe den aktive celle er tom, indsættes værdien 25. Hvis cellen ikke er tom, vises en MsgBox. Figur 148 Værdien 25 indsættes 20 gange i regnearket ved hjælp af variablen Tæller. Afprøv makroen. Kopiér makroen og kald kopien for Løkke2. Redigér makroen, så værdien 25 indsættes trinvis nedad og udad til kolonne IV. Makroen må ikke vise fejl og værdien 25 skal også indsættes i den sidste kolonne det vil sige i arealet fra D2:IV254. Du lærte i Øvelse 8 hvorledes du beregner udførelsestiden for en makro. Kopiér igen makroen til Løkke3. Beregn og vis i en meddelelsesbokss, hvor længe det tager at udføre ovenstående løkke. Redigér igen makroen, denne gang, så løkken udføres nedad i kolonne D, ned til række 10001. Beregn hvor længe det tager og vis resultatet i en beskedboks. Prøv derefter at anvende ScreenUpdating, og kontroller hvor meget hurtigere makroen bliver. Makroen skulle gerne udføres på under den halve tid. 200 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 13 Formål Arbejde med elementer i et regneark. Henvisninger Følg øvelsen instruktionerne vises i øvelsen. Øvelse Åbn filen Øvelse13.xls filen er placeret på disketten. Denne fil indeholder forskellige tal i arkene Jylland Fyn & Øerne. Disse ark er konsolideret i arket Total. Du skal i denne øvelse oprette nogle alternativknapper, som gør det muligt at vise kvartalstallene for de enkelte regioner, eller fra total arket. Figur 149 Aktivér værktøjslinjen Formularer. Indsæt en gruppeboks i arket Kvartalstal, som vist i Figur 150. Excel XP VBA.doc Ver. 2 2003 F.M.T. 201

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Figur 150 Værktøjsknappen for en gruppeboks Opret denne gruppeboks Figur 151 Indsæt derefter fire alternativknapper i gruppeboksen, som vist nedenfor. Det er vigtigt at alternativknapperne ikke går udover kanten af gruppeboksen. Omdøb gruppeboksen og alternativknapperne, som vist herunder: 202 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Figur 152 NB! Justering! Bemærk at gruppeboksen og de fire alternativknapper alle er navngivet og nummereret. Dette vises i navnelisten. Alt tasten anvendes til at ændre størrelsen på et objekt. Ctrl tasten anvendes til at markere objektet (eller højreklik på objektet). Skift tasten anvendes til at flytte objektet vandret eller lodret. Ctrl og Skift anvendes til at markere flere objekter. Værktøjslinjen Tegning kan anvendes til justering. Navngiv arealet C6:F6 som SætVærdi. Navngiv arealet C7:F7 og C11:F15 som Areal. Dobbeltklik på kanten af gruppeboksen. Excel viser nu dialogboksen for Formater kontrolelement. Markér fanen Kontrolelement og vælg 3D-skygge. Skift til Visual Basic og indsæt et modul i mappen Øvelse13.xls. Opret nedenstående kode i modulet. Excel XP VBA.doc Ver. 2 2003 F.M.T. 203

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Tip! NB! Sub AlternativKnap2_Klik() Range("c6").Select ActiveCell.FormulaR1C1 = "=SUM(Jylland!RC[-1]:RC[1])" Range("D6").Select ActiveCell.FormulaR1C1 = "=SUM(Jylland!RC[1]:RC[3])" Range("E6").Select ActiveCell.FormulaR1C1 = "=SUM(Jylland!RC[3]:RC[5])" Range("F6").Select ActiveCell.FormulaR1C1 = "=SUM(Jylland!RC[5]:RC[7])" Range("SætVærdi").Copy Range("Areal").Select ActiveSheet.Paste Range("c6").Select End Sub Tilknyt derefter koden til den første alternativknap. Afprøv knappen i regnearket Kvartalstal. Kopiér koden i modulet nedefter 3 gange. Redigér navnet for proceduren og tilknyt koden til hver enkelt knap. Husk at rette henvisningen til de korrekte regneark. Når du køre koden for alternativknappen Fyn & Øerne, vil der opstå en fejl. Dette skyldes at der er mellemrum i arknavnet. Du løser dette problem ved at refererer til arknavnet således: ActiveCell.FormulaR1C1 = "=SUM( Fyn & Øerne!RC[-1]:RC[1])" Bemærk at der er sat en apostrof [ ] foran og efter arknavnet. Prøv om du selv kan tolke koden ellers bed instruktøren om at gennemgå løsningen. Når værdierne er indsat i Kvartalsarket, vil din markør vise en stiplet ramme, som angiver at der stadig gemmes en værdi i hukommelsen. Du skal nederst i din kode, for hver procedure, have indsat en kommando, som tømmer udklipsholderen. Kør makroen igen. Start derefter indspilningen af en ny makro. Tast [Esc] for at tømme udklipsholderen. Stop derefter makroindspilningen. Kontroller hvad Excel har indspillet i den nye makro og indsæt denne kode nederst i hver procedure. Slet derefter den makro du netop indspillede. 204 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Ovenstående eksempel viser hvorledes du kan indspille handlinger hvor du ikke kender VBA koden. Excel XP VBA.doc Ver. 2 2003 F.M.T. 205

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 206 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 14 Formål Oprette en brugerfunktion til beregning af renter. Henvisninger Følg øvelsen instruktionerne vises i øvelsen. Figur 153 Øvelse Blandt de mange udmærkede finansielle funktioner, som findes i Excel, mangler der en Funktion, som kan beregne renten af en hovedstol, hvor betalingsdatoen er overskredet. Beregn denne rente ved hjælp af en brugerfunktion Opret i Person.xls en funktion med navnet MinRente, som kan beregne ovenstående rente. Du kan indtaste den viste opstilling i filen VBA i Microsoft Excel XP. Beregn den værdi som skal vises i celle E4. Excel XP VBA.doc Ver. 2 2003 F.M.T. 207

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 208 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 15 Formål Arbejde med UserForms. Du skal i denne øvelse oprette en UserForm. Formularen skal anvendes til beregning af vilkårlige tal. Henvisninger Opret Userforms side 137. Følg øvelsen instruktionerne vises i øvelsen. Øvelse Aktivér Visual Basic. Indsæt en UserForm i projektet Person.xls. Opret nedenstående elementer i formularen. Der skal indsættes 6 objekter af typen Etiket. 2 objekter af typen Kommandoknap og 1 objekt af typen Billede (placeres oven for kommandoknapperne). Figur 154 For læsbarhedens skyld er baggrunden sat med mørk farve. Sæt nedenstående egenskaber for de enkelte elementer: Label1: Excel XP VBA.doc Ver. 2 2003 F.M.T. 209

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Caption: Kast Syv Font: Arial, 48 pkt. fed ForeColor: &H00C000C0& Heigh: 132 TextAlign: 2-frmTextAlignCenter Width: 126 Label2: Caption: Vundet 0 af 0 spil Font: Arial, 11 pkt. fed. ForeColor: &H00C000C0& Heigh: 24 TextAlign: 1-frmTextAlignLeft Label3: Caption: Font: Arial ForeColor: &H00C000C0& Heigh: 24 TextAlign: 1-frmTextAlignLeft Label4: Caption: Font: Times New Roman, 24 pkt. fed. ForeColor: &H80000012& Heigh: 42 SpecialEffect: 2 - frmspecialeffectsunken TextAlign: 2-frmTextAlignCenter Width: 42 Label5: Caption: Font: Times New Roman, 24 pkt. fed. ForeColor: &H80000012& Heigh: 42 SpecialEffect: 2 - frmspecialeffectsunken TextAlign: 2-frmTextAlignCenter Width: 42 Label6: 210 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Caption: Font: Times New Roman, 24 pkt. fed. ForeColor: &H80000012& Heigh: 42 SpecialEffect: 2 - frmspecialeffectsunken TextAlign: 2-frmTextAlignCenter Width: 42 Image1: AutoSize: False BorderStyle: 0 - frmborderstylenone Heigh: 102 Picture:?\Clipart\Populær\Mønter.wmf. PictureAlignment: 2 - frmpicturealignmentcenter PictureSizeMode: 1 frmpicturesizemodestretch Width: 156 CommandButton1: Name: cmdkast AutoSize: False Caption: Kast Font: Tahoma ForeColor: &H80000012& Height: 24 CommandButton2: Name: cmdafslut AutoSize: False Caption: Afslut Font: Tahoma ForeColor: &H80000012& Height: 24 UserForm1: Name: frmlotteri Caption: LOTTERI Font: Tahoma ForeColor: &H80000012& StartUpPosition: CenterOwner Excel XP VBA.doc Ver. 2 2003 F.M.T. 211

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Opret et Modul med navnet MakroerUserForms. Dobbeltklik på knappen cmdafslut for at åbne kodevinduet. Indsæt nedenstående kode i proceduren Sub cmdafslut_click() Sub cmdafslut_click() End End Sub Dobbeltklik på knappen cmdkast for at åbne kodevinduet. Indsæt nedenstående koden: Private Sub cmdkast_click() Spil = Spil + 1 Image1.Visible = False Label4.Caption = Int(Rnd * 10) Label5.Caption = Int(Rnd * 10) Label6.Caption = Int(Rnd * 10) If (Label4.Caption = 7) Or (Label5.Caption = 7) _ Or (Label6.Caption = 7) Then Image1.Visible = True Beep Vundet = Vundet + 1 End If Label2.Caption = "Vundet: " & Vundet & " af " & Spil & " spil" Label3.Caption = Fordeling(Vundet, Spil) End Sub Indsæt nedenstående kode i modulet MakroerUserForms. Option Explicit Public Vundet Public Spil Function Fordeling(Kast, Forsøg) As String Dim Percent As Double Percent = Kast / Forsøg Fordeling = Format(Percent, "00.0%") End Function Sub KastSyv() frmlotteri.show End Sub Afprøv formularen. De første fem kast vil vise resultatet 7 i én af kasserne. Derefter vil du tabe, hvorefter billedet skjules. 212 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Hver gang du kører denne formular, vil Excel starte med de samme tal. For at undgå dette, skal du oprette nedenstående kode i kodevinduet til frmlotteri. Private Sub UserForm_Initialize() Randomize End Sub Figur 155 Hvilken værdi vises der i formularen for vundet spil, hvis du ændrer datatypen for variablen Percent (anvendt i Function Fordeling) til Byte? Excel XP VBA.doc Ver. 2 2003 F.M.T. 213

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 214 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 16 Formål Arbejde med tilføjelser. Henvisninger Søg i Hjælpen til Excel på Add-Inns. Tip! Øvelse Opret et nyt regneark med navnet MineTilføjelser. Slet fanerne Ark2 og Ark3. Flyt proceduren VisSkjulFormler (er gemt i Person.xls) over i dette regneark. Opret en ny procedure, som skifter mellem at vise eller skjule R1C1 referencer. Kald proceduren for A1OrR1C1. Gem regnearket i biblioteket AddInns som ligger under Office. Tilføj to trykknapper til Standard værktøjslinjen. Knapperne skal refererer til hver sin makro. Hvis du vil beskytte dit modul for redigering, så skal du gøre det i makrovinduet ved hjælp af menuen Egenskaber for VBAProjekt og fanen Beskyttelse. Du kan højreklikke med musen på dit modul hvis du vil indstille egenskaberne for projektet. Aktivér menuen Filer/Gem som. Gem regnearket som MineTilføjelser.xla. Figur 156 Excel XP VBA.doc Ver. 2 2003 F.M.T. 215

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Figur 157 Afslut Excel. Start Excel. Aktivér menuen Funktioner/Tilføjelsesprogrammer. Indlæs filen MineTilføjelser.xla. Du kan vise en beskrivelse her, ved at udfylde Filer/Egenskaber feltet Titel. Tip! Hvis du vil vise en beskrivelse for MineTilføjelser nederst i ovenstående dialogboks, skal du udfylde feltet Titel i menuen Filer/Egenskaber, mens filen endnu er en XLS fil. Højreklik med musen på en værktøjslinje og vælg Tilpas. Klik på den ene makroknap og vælg fanen Kommandoer og derefter knappen Rediger markering. Vælg punktet Tildel makro. Du ser nu dialogboksen for Tildel makro. Slet filhenvisningen fra makronavnet, så du kun ser makronavnet. Makroen vil nu refererer til tilføjelsesprogrammet. Gentag proceduren for den anden makroknap. Du kan nu anvende de trykknapper, du har tilføjet til værktøjslinjen. 216 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Figur 158 Makroen A1OrR1C1 Hvis du vil redigere eller oprette nye tilføjelser, skal du gøre det i kopien (din XLS fil) og derefter gentage de udførte handlinger. Excel XP VBA.doc Ver. 2 2003 F.M.T. 217

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 218 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Øvelse 17 Formål Arbejde med betingelser. Du skal i denne øvelse anvende en betingelse, som undersøger om et password er korrekt. Henvisninger Betingelser og løkker se side 67. Øvelse Korriger nedenstående kode så følgende sker: Der må kun udføres tre forsøg, hvis password er forkert. Nummeret for det aktuelle forsøg skal vises i titellinjen og tælle nedad hvis der prøves flere gange. Der skal testes på store og små bogstaver. Sub AnvendOr() Dim n As String start: n = InputBox( Indtast dit Password, System adgang ) If n = 011GODKEND13 Or n = 13godkend011 then MsgBox Du har adgang Else MsgBox Indtast korrekt Password GoTo start End If End Sub Afprøv løsningen. Excel XP VBA.doc Ver. 2 2003 F.M.T. 219

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 220 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Ekstraøvelse 1 Formål Ændre et tilføjelsesark. Du skal i denne øvelse oprette en makro, som skjuler de rækker og kolonner, som ikke anvendes i et regneark. Dette gør navigeringen i regnearket nemme for brugeren. Henvisninger Følg øvelsen instruktionerne vises i øvelsen. Øvelse Figur 159 Du skal udføre følgende: Opret en makro, som skjuler de rækker og kolonner, som ikke anvendes i et ark. Indsæt denne makro i MineTilføjelser. Tilføj makroen som en trykknap i værktøjslinjen Standard. Prøv på egen hånd at oprette ovenstående. Hvis øvelsen er for svær, kan du anvende nedenstående kode til makroen: Sub SkjulRækkerKolonner() Excel XP VBA.doc Ver. 2 2003 F.M.T. 221

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA EKSTRAØVELSE1 ' SkjulRækkerKolonner Makro ' Skjuler rækker og kolonner som ikke anvendes. Application.ScreenUpdating = False Selection.SpecialCells(xlCellTypeLastCell).Select ActiveCell.Offset(1, 1).Range("A1").Select ActiveWorkbook.Names.Add Name:="start", _ RefersToR1C1:=Selection Selection.End(xlDown).Select Selection.End(xlToRight).Select ActiveWorkbook.Names.Add Name:="slut", _ RefersToR1C1:=Selection Range("slut:start").Select Selection.EntireColumn.Hidden = True Selection.EntireRow.Hidden = True ActiveWorkbook.Names("start").Delete ActiveWorkbook.Names("slut").Delete Range("A1").Select Application.ScreenUpdating = True End Sub Afprøv løsningen. Du kan gøre makroen hurtigere hvis du nøjes med at oprette navnet start. Hvis du derefter taster [F5] og indtaster arealet start:iv65536, vil Excel markere et tilsvarende område, som vist i koden. Du kan indspille ovenstående makro således: Opret et nyt arbejdsark. Indsæt værdien 25 i celle C8. Start makroindspilningen. Tast [F5] for at aktivere dialogboksen Gå til. Klik på knappen Speciel. Markér alternativknappen Sidste celle. Excel placerer nu markøren på den celle som er anvendt nederst og yderst til højre i arket. Klik på knappen Relativ reference i værktøjslinjen Stop indspilning. Dermed vil Excel anvende metoden Offset. Flyt markøren én celle ned, og én celle til højre. 222 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Klik i navneboksen og indtast navnet start (Husk at taste [ENTER] for at gemme navnet). Tast igen [F5] for at aktivere Gå til. Indtast nederst i dialogboksen området start:iv65536 og klik på knappen OK. Aktivér menuen Formater/Kolonne/Skjul og derefter menuen Formater/Række/Skjul. Tast [Ctrl]+[Home] for at flytte markøren til celle A1. Denne linje vises kun fordi du anvendte relativ cellereference. Du kan forkorte koden til Active- Cell.Offset(1,1).Select Aktivér menuen Indsæt/Navn/Redigér og slet navnet start. Dermed vil den sidst anvendte celle være celle C8. Stop makroindspilningen. Aktivér Visual Basic vinduet og kontroller at du har nedenstående kode. Redigér koden så du anvender ScreenUpdating. Sub Makronavn() ' ' Makro indspillet ' Selection.SpecialCells(xlCellTypeLastCell).Select ActiveCell.Offset(1, 1).Range("A1").Select ActiveWorkbook.Names.Add Name:="slut", _ RefersToR1C1:="=Ark1!R9C4" Application.Goto Reference:="slut:R65536C256" Selection.EntireColumn.Hidden = True Selection.EntireRow.Hidden = True Range("A1").Select ActiveWorkbook.Names("slut").Delete End Sub Excel XP VBA.doc Ver. 2 2003 F.M.T. 223

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 224 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Ekstraøvelse 2 Formål Arbejde med egne hjælpefiler i Microsoft Office Assistent. Henvisninger Følg øvelsen instruktionerne vises i øvelsen. Øvelse Aktivér Office Assistent fra Visual Basic. Søg på ét af nedenstående udtryk, afhængig af din sprogversion af Visual Basic. Overview of the Office Assistant/Creating and modifying balloons Hvis ikke hjælpefilen til ovenstående emne er installeret, kan du anvende nedenstående eksempel, som vil oprette en talebobel, hvorfra brugeren kan vælge en printer. Dim bln Dim lbltxt Set bln = Assistant.NewBalloon With bln.heading = "Vælg en printer.".text = "Klik OK når du har valgt en printer." lbltxt = "Aktivér menuen Filer/Udskriv.".Labels(1).Text = lbltxt.labels(2).text = "Klik på Egenskaber.".Labels(3).Text = "Vælg den ønskede printer.".checkboxes(1).text = "Udlad denne information.".balloontype = msoballoontypenumbers.mode = msomodemodal.button = msobuttonsetok.show End With Du skal indsætte ovenstående kode i en procedure og derefter køre denne procedure kald eventuelt makroen for VisTaleBobel. Når du afprøver denne makro, vil Excel vise Office-assistent. Excel XP VBA.doc Ver. 2 2003 F.M.T. 225

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Figur 160 Tip! Du kan med stor fordel lave professionelle løsninger efter dette eksempel, da du kan indsætte Hjælpeknapper i dine UserForms. Når brugeren klikker på din hjælpeknap, kan du vise dine egne talebobler på skærmen. 226 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Ekstraøvelse 3 Formål Arbejde med gruppebokse. Figur 161 Øvelse Redigér din løsning fra Øvelse 13, så du får mulighed for at vise værdierne i procent eller i beløb, som vist nedenfor: Du skal vise værdierne i procent eller i kroner Gem din løsning. Indsæt en trykknap under gruppeboksene, med tekstfladen Hjælp. Opret din egen hjælpefil, som skal vises i Office-assistent, hvis brugeren klikker på knappen. Excel XP VBA.doc Ver. 2 2003 F.M.T. 227

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA Figur 162 Det vil være perfekt hvis hjælpen vist ovenfor kom frem, dersom man indtaster nye værdier i regnearket. Afprøv nedenstående kode i modulet til denne øvelse. 228 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer 'kode som indlæses når arket åbnes Sub Auto_Open() 'Ved indtastning afspilles makroen VedÆndringAfCelle Application.OnEntry = "VedÆndringAfCelle" End Sub 'kode som udføres hvis det aktive ark = kvartalstal Sub VedÆndringAfCelle() If ActiveSheet.Name = "Kvartalstal" Then Dim bln Dim lbltxt As String Set bln = Assistant.NewBalloon With bln.heading = "Du må ikke skrive i Regionsoversigt.".Text = "Sådan udfylder du formularen." lbltxt = "Indsæt de ønskede værdier i de respektive ark.".labels(1).text = lbltxt.labels(2).text = "Markér om du vil se værdier eller procenter".labels(3).text = "Vælg den ønskede region".balloontype = msoballoontypenumbers.mode = msomodemodal.button = msobuttonsetok.show End With End If End Sub Du skal lukke og genåbne filen, inden din Auto_Open makro virker. Kunne du have udført den samme løsning, ved hjælp af objektet ThisWorkbook, og de dertil foruddefinerede hændelser? Excel XP VBA.doc Ver. 2 2003 F.M.T. 229

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 230 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Ekstraøvelse 4 Formål Arbejde med objektvariabler. Henvisninger Objektvariabler side 58. Øvelse Din løsning fra Øvelse 12 kan optimeres, så makroen bliver endnu hurtigere, ved at anvende en direkte reference til startcellen, i stedet for at anvende Select metoden. Du kan anvende en objekt-variabel (eksempelvis kaldet StartCelle), som du angiver med instruktionen Set. Nedenstående kode viser et eksempel på en sådan kode: Public Sub Løkke4() On Error GoTo Færdig Dim Tæller As Long Dim Var1 As Date, Var2 As Date, StartCelle As Range Var1 = Time Set StartCelle = Worksheets("Ark3").Range("D2") Application.ScreenUpdating = False Do While Tæller < 10000 If IsEmpty(StartCelle.Offset(Tæller, 0)) Then StartCelle.Offset(Tæller, 0).Value = 25 Else MsgBox "Cellen er ikke tom" GoTo Færdig: End If Tæller = Tæller + 1 Loop Færdig: Var2 = Time MsgBox "Det tog " & DateDiff("s", Var1, Var2) & " sekunder" Application.ScreenUpdating = True End Sub Afprøv ovenstående løsning. Excel XP VBA.doc Ver. 2 2003 F.M.T. 231

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 232 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Ekstraøvelse 5 Formål Arbejde med markeringer. Øvelse Side 121 viser et eksempel på hvorledes du sletter formler i et ark se afsnittet Slette formler i et ark. Prøv om du med den indbyggede funktion Gå til/speciel kan gøre makrokoden kortere. Prøv derefter om du kan gøre det næste eksempel på side 121 kortere. Eksemplet viser hvorledes du sletter formler for et markeret område. Excel XP VBA.doc Ver. 2 2003 F.M.T. 233

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 234 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer Indeks A B C D E Absolut cellereference 117 Aflæse en værdi fra et objekts egenskab 52 Aflæse værdien fra en tekstboks 141 Aktivering af specifik fane i et regneark 117 And 69 Anmod bruger om en værdi 122 ANSI-tegnsæt 77 Antallet af åbne mapper 51 Anvende en metode til at aktivere et objekt 52 Anvende værdien fra en funktion 70 Applikationer 39 Arrays 83 arrays i flere dimensioner 84 ASCII-tegnsæt 77 Begrænsninger i makroer 18 Bestemt erklæring af variabel 64 Breakpoints 160 Bryde kodelinjen 132 Classes 26 Code 33 Controls 43 Datatype 55 Deaktivér skærmopdateringer 115 Den personlige projektmappe 127 Dim 60 Dokumentation af makroer 18;75 Egenskab Bibliotek 51 Eksempler på egenskaber i Excel 51 HarAdgangskode 51 Navn 51 Program 51 Skrivebeskyttet 51 Egenskab 45 Egenskaber 24 Egenskaber og metoder 52 Egenskaber og metoder for en samling 51 Egenskabsvindue 33 Eksplicit 55 Enkeltstående objekter 50 Events Se hændelse Excel objekter 46 F G H I K L F2 25 Fejlfinding 155 Værktøjslinjen Debug 156 Watches 155 Fejlvenlig kode 62 Flytte et kontrolelement 139 For Next 58 Fuld installation af Microsoft Excel XP 14 Function procedure 40 Funktion 70 Funktion til beregning af alder 80 Funktion til beregning af Køn 81 Funktionen Input 89 Funktionen InputBox 122 Funktionen MsgBox 125 Gem makroen 18 Hændelse 24 Hændelse 44 Højre 78 If Then Else 67 If Then ElseIf 69 Immediate 73 Implicit 55 Indbyggede dialogbokse 135 index 50 Index 83 Indledning 11 Indstilling Eksplicit 64 Indsæt en værdi fra en InputBox i regnearket 123 Indsæt søgestien i sidefoden 118 Indsætte et kontrolelement 138 Inputbox 124 InputBox InputBox Function 124 InputBox Method 124 InStr 77 InStr() 81 InStrRev() 82 Klassemoduler 34 Kursets indhold 13 Left 77 Left 78 Len() 82 Libraries 25 Load 141 Løkker 71 Do Loop 72 For Each Next 71 For Next 71 Excel XP VBA.doc Ver. 2 2003 F.M.T. 235

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA M While Wend 73 Makroer 40 Gemme 29 Den aktive projektmappe 29 Den personlige makroprojektmappe 29 Windows 2000 31 Ny projektmappe 29 Kategorier 28 Applikation 28 Automatisering 28 Program 28 Prioritet 29 Marker en hel kolonne 118 Matricer 83 Matricer 83 Meddelelsesboks med flere knapper 126 Members 26 Methods Se metoder Metode Metoder 52 Close 52 Eksempler på metoder i Excel 52 PrintPreview 52 Protect 52 Save 52 Select 52 Metode 44 Metoder 24 Mid 77;78 Mid() 82 Midt 78 N O Navngivning af makroer 103 Object Browser Se Objektoversigt Objekt 44 Objekter i samlinger 50 objektet ThisWorkbook 127 Objektoversigt 25;35 Objektvariabler 58 Option Base 1 83 Option Explicit 62 Optional 101 Or 69 P R S T Person.xls 31;127 Private 60 Procedure Funktioner 44 Sætninger 44 Procedure 44 procedure med samme navn 96 Procedurer 40 Function Procedure 40 Property Procedure 41 Sub Procedure 40 Programkodevindue 33 Project 33 Projekt 45 Projektoversigt 33 Properties 33 Property procedure 40 Public 61 Range 53 Referencer til objekter 50 Relativ cellereference 117 Relativ reference 222 Require Variable Declaration 62 Right 78 Right 77 Sammensat type 85 Sand/Falsk 51 Sektionen Declarations 60 Select Case 70 Selection.Offset(x,x) 119 Show 134;141 Slet formler i område 121 Slette formler i et ark 121 Static 60 Stringvariabler 63 Sub procedure 40 Sumformel for areal 117 Sæt egenskaber for en UserForm 146 Tekstfil 88 ThisWorkbook 128 ThisWorkbook 127 Tildele en værdi til et objekts egenskab 52 Tilføj en makro til værktøjslinjen 109 Tilføje data til en variabel 65 Tilstand Append 91 Tilstand Write 91 Type 84 Type 85 Typeerklæringstegn 63 236 2003 F.M.T. Excel XP VBA.doc Ver. 2

Microsoft Excel XP - Makroer med VBA UOprette egne værktøjslinjer U V Ubestemt erklæring af variabel 63 Udfør handling når Excel startes 126 Until 72 UserForm1 137 UserForms 137 Load 140 Omdøbe en UserForm 137 Oprette en UserForm 137 Unload 140 Variabel 55 Variabelerklæring Const 60 Dim 60 Public 61 Variabler 55 VBA 40 Venstre 78 Vis besked i Statuslinjen 125 Vis besked på skærmen 125 Visual Basic for Applications 15 Volatile 101 Værktøjslinjen Debug 36 Værktøjslinjen Edit 36 Værktøjslinjen Standard 35 Værktøjslinjen Toolbox 37 Værktøjslinjen UserForm 36 Værktøjslinjerne i VBA 35 X Æ xlb 163 XlBuiltinDialog 134 XLStart 31 XLSTART 29 Ændre genvejstaster for en makro 172 Ændre størrelsen på et kontrolelementet 140 Excel XP VBA.doc Ver. 2 2003 F.M.T. 237

UOprette egne værktøjslinjer Microsoft Excel XP - Makroer med VBA 238 2003 F.M.T. Excel XP VBA.doc Ver. 2