Avatar billede hansj Praktikant
04. januar 2011 - 10:04 Der 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.
Avatar billede Lene Fredborg Ekspert
04. januar 2011 - 10:36 #1
Når du opretter det nye dokument, så hold styr på det med en variabel

Dim oDocNew As Document

Set oDocNew = Documents.Add 'osv. - din kode til oprettelse af dokumentet

'Før du slutter makroen - aktiver dokumentet:
oDocNew.Activate

'Ryd op igen:
Set oDocNew = Nothing

Hvis du også har brug for at holde styr på, hvad der er det oprindelige, aktive dokument, så kan du gøre tilsvarende med det:

'Før du ændrer på, hvad der er aktivt:
Dim oDocOrig as Document
Set oDocOrig = ActiveDocument

'Til sidst: ryd op igen:
Set oDocOrig = Nothing
Avatar billede hansj Praktikant
04. januar 2011 - 12:19 #2
Kære Lene!

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

End Sub
Avatar billede Lene Fredborg Ekspert
04. januar 2011 - 21:01 #3
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.
Avatar billede hansj Praktikant
04. januar 2011 - 22:05 #4
Kære Lene!

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.
Avatar billede Lene Fredborg Ekspert
04. januar 2011 - 23:35 #5
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 :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester