04. januar 2011 - 10:04Der er
4 kommentarer og 1 løsning
Aktivt dokument efter makrokørsel
Jeg har lavet en makro med en inputform, som er gemt i et Worddkument (Word 2007). Den konstruerer Floyds trekant for et af brugeren (i inputformen) valgt antal rækker (dog maks. 15 på grund af papirets begrænsede bredde), og det gør den i et nyt dokument.
Den fungerer udmærket, men der er en lille ting, en meget lille ting, der irriterer mig: når makroen er kørt færdig, så ender jeg med det oprindelig dokument på skærmen igen, altså det dokument, hvori makroen både er gemt og står beskrevet.
Jeg skal så skifte manuelt til det vindue, hvori resultatet, det nye dokument med Floyds trekant befinder sig.
Findes der ikke en automatisk metode til at lade det nye dokument være aktivt?
Det må der vel gøre, men jeg har trods adskillige forsøg ikke fundet frem til metoden.
Jeg havde eksperimenteret med metoder i retning af, hvad du foreslår. Men kunne ikke få dem til at virke.
Efter at have forsøgt mig med logisk tænkning fandt jeg løsningen: det nye dokument skal oprettes, <i>før</i> formen til indtastning aktiveres.
Når man aktiverer en form, og slutter af med at unloade den, vender Word åbenbart tilbage til det dokument, der var aktivt, på det tidspunkt da formen blev indlæst.
Derfor flyttede jeg enkelt linje hen foran form-kaldet, så makroen nu indledes således, altså med oprettelsen af det nye dokument - før noget som helst andet:
Public Sub Floyd()
' Opretter et nyt dokument (denne linje skal stå allerførst, ' eller i hvert fald, før formen aktiveres.) Documents.Add DocumentType:=wdNewBlankDocument
' Viser formen - og derefter tager koden knyttet til formen over frmRaekkeantal.Show
Du skriver: "Når man aktiverer en form, og slutter af med at unloade den, vender Word åbenbart tilbage til det dokument, der var aktivt, på det tidspunkt da formen blev indlæst"
... det kommer helt an på, hvad din kode ellers laver. Du kan jo sagtens via koden aktivere diverse andre dokumenter og meget andet, som bevirker, at det ikke er tilfældet.
Det vil efter min bedste overbevisning altid være sikrest at lave en præcis reference til de dokumenter, man vil foretage noget med. En eller anden dag ændrer du (eller en anden) måske noget i koden, som i mellemtiden får aktiveret et andet dokument. Med den metode, jeg har anvist, kan du styre så mange dokumenter, det måtte være, og være sikker på, at det er det rigtige dokument, du tager fat i.
Efter endnu et par forsøg er det lykkedes mig at få tingene til at fungere efter din metode. Og der er ingen tvivl om, at den metode er den mest stringente, sikre og stilrene.
Problemet var, nåede jeg frem til, at jeg havde defineret dokumentvariablen på et forkert sted i forløbet.Sådan som jeg har konstrueret makroen, skal den i øvrigt desuden defineres som Public.
Det var godt, at du fik det til at virke. Og ja, hvor og hvordan variablerne skal erklæres afhænger jo af diverse. For overskuelighedens skyld havde jeg blot skrevet dem lige over det sted, hvor de blev brugt, da koden jo bestod af løsrevne stumper :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.