26. februar 2008 - 15:06Der er
7 kommentarer og 1 løsning
Aktivere korrekt åbne dokument
Jeg har lavet en form hvor jeg direkte har programmeret et par knapper som åbner en ny skabelonfil (dot). Efterfølgende lukkes formen igen, og jeg kan anvende skabelonen. Nu er problemer imidlertid at det aktive dokument der vises er det der var vist før jeg åbner formen, altså ikke det nye. Jeg har forgæves forsøgt at finde det nye vinduesnummer via Application.ActiveWindow.Index som ser ud til at virke korrekt. Efterfølgende har jeg prøvet at aktivere det nye dokument med Windows(Dokument).Activate, men stadig uden rigtigt resultat. Håber jeg har forklaret mig så det kan forståes.
Det er altid en fordel at knytte en objektreference til alle de dokumenter, du skal holde styr på. Så kan du til enhver tid få fat i det rigtige dokument igen. Eksempel:
Mens du er sikker på, at dit rigtige dokument er aktivt:
Dim oDoc as Document
'Knyt en objektreference til dokumentet - brug Set Set oDoc = ActiveDocument
Du kan også knytte en objektreference til, allerede mens du opretter eller åbner et dokument: Set oDoc = Documents.Add… Set oDoc = Documents.Open…
Når du så skal bruge dokumentet igen, kan du f.eks. bruge Activate til at aktivere det:
oDoc.Activate
Du kan også f.eks. få fat i data i dokumentet:
oDoc.Tables(1)….
I slutningen af din makro bør du frigive sådanne objektreferencer igen:
Som du har foreslået lene har jeg prøvet at ligge følgende kode på knappen i min form.
Private Sub CommandButton1_Click() Dim oDoc As Document Documents.Add Template:="L:\Skabelon\Brev DK.dot", NewTemplate:=False, DocumentType:=0 Set oDoc = ActiveDocument frmForm.hide oDoc.Activate Set oDoc = Nothing End Sub
Det er dog stadigvæk ikke det nye dokument der vises, men det dokument jeg stod i før jeg startede formen, og det skal jo være det nye dokument/skabelon
Jeg har jo ikke mulighed for at prøve lige nøjagtig det samme, som du har. Har du checket, at dit nye dokument _er_ det aktive dokument lige efter linjen "Documents.Add..."? (brug F8 til at steppe gemmem koden linje for linje).
Prøv at knytte referencen til dit nye dokument med det samme, dvs. lav de to linjer "Documents.Add..." og "Set oDoc..." om til følgende linje:
Set oDoc = Documents.Add (Template:="L:\Skabelon\Brev DK.dot", NewTemplate:=False, DocumentType:=0)
Gør det en forskel?
Ellers: er der noget med Application.Screenupdating, du har sat til False, så skærmen ikke bliver opdateret?
Jeg har prøvet, efter jeg opretter det nye dokument, at sætte en msgbox der viser det active.index, altså det nyeste vinduesnr. Nummeret er det rigtige. Problemet er blot at når jeg, efter har lukket formen ikke kan activere netop dette nr.
Slutter din kode med det, du har vist ovenfor? I givet fald er problemet sikkert, at du ikke lukker din UserForm. Du bruger frmForm.Hide. Det lukker ikke din UserForm - men skjuler den kun. Du kan bruge "Unload me" for at lukke. Prøv at fjerne frmForm.Hide og indsæt: Unload me lige før End sub
Jeg tror jeg har lidt problemer omkring nogle modstidende interesser idet jeg også har et script som husker aktuel dokument istedet for nyt dokument af hensyn til en printfunktion. Jeg har løst problemet via 2 selvstændige forms og det virker nu.
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.