Avatar billede LIIT4242 Nybegynder
13. august 2009 - 14:43 Der er 3 kommentarer og
1 løsning

VBA styrring af Word fra Excel

Jeg skal have udskrevet noget tekst fra Excel, og åbner derfor Word og indsætter min tekst, og udskriver.

Alt dette virker fint - men når jeg så beder Word om at lukke, så spørger Word flere gange, om jeg vil gemme mine ændringer. Jeg er kommet af med det første spørgsmål - men jeg bliver stadig spurgt om jeg vil gemme ændringerne i Normal.Dot (hvordan Normal.dot er blevet blandet ind i det, aner jeg ikke). Hvordan får jeg Word til at lukke uden at spørge brugeren om noget ?

  Dim wrdApp As Word.Application
  Dim wrdDoc As Word.Document

  Set wrdApp = CreateObject("Word.Application")
  Set wrdDoc = wrdApp.Documents.Add
 
  wrdDoc.Content.Font.Name = "Courier"
  wrdDoc.Content.InsertAfter myBody
  wrdDoc.PrintOut
 
  wrdApp.Quit SaveChanges = wdDoNotSaveChanges
     
  Set wrdApp = Nothing
  Set wrdDoc = Nothing
Avatar billede Lene Fredborg Ekspert
13. august 2009 - 17:06 #1
Først et par bemærkninger:

Når Word spørger, om Normal.dot skal gemmes, er det fordi Word har registreret, at der er sket ændringer i Normal.dot. Det kan være fordi Word var kørende i forvejen og brugeren f.eks. har oprettet en tastaturgenvej eller en autotekst - og så går det det ikke godt, at du bare lukker uden at gemme. Det kan også skyldes en ikke så heldigt lavet Word-add-in, som laver ændringer i Normal.dot under opstart (ikke en god skik).

Jeg mener, du bør undersøge, om Word allerede kører. Hvis det er tilfældet, så brug den kørende Word, ellers start Word. Makroen nedenfor virker hos mig. Af praktiske grunde ændrede jeg makroen, så der ikke er behov for at sætte reference til Word i VBE.

Makroen er lavet, så Word kun lukkes, hvis det er makroen, der har startet Word. Bemærk, at jeg har indsat en linje, som sørger for, at Word ikke spørger, om den skal gemme Normal.dot - det kan kompensere for evt. dårligdomme i den sammenhæng.

Sub TestWord()

    Dim wrdApp As Object 'Word.Application
    Dim wrdDoc As Object 'Word.Document
    Dim bRunning As Boolean
   
'    'Følgende tekst lavet for at kunne teste - slet igen
'    Dim myBody As String
'    myBody = "dette er en test"
   
    bRunning = True
   
    'Undersøg om Word allerede kører
    On Error Resume Next
    Set wrdApp = GetObject(, "Word.Application")
    If Err.Number = 429 Then
        'Word kører ikke - start Word
        Set wrdApp = CreateObject("Word.Application")
        Err.Clear
        bRunning = False
    End If

    Set wrdDoc = wrdApp.Documents.Add
   
    With wrdDoc
        .Content.Font.Name = "Courier"
        .Content.InsertAfter myBody
        .PrintOut
    End With
   
    wrdDoc.Close savechanges:=False 'wddonotsavechanges
   
    'Luk Word hvis det blev startet af makroen
    If bRunning = False Then
        'Undgå at få Word til at spørge om at gemme ændringer til Normal.dot
        wrdApp.normaltemplate.Saved = True
        'Luk Word
        wrdApp.Quit
    End If
   
    Set wrdApp = Nothing
    Set wrdDoc = Nothing
End Sub
Avatar billede claes57 Ekspert
13. august 2009 - 17:07 #2
et :

SaveChanges:=wdDoNotSaveChanges
Avatar billede LIIT4242 Nybegynder
14. august 2009 - 08:37 #3
Havde slet ikke tænkt på, at brugeren kunne have word åbent i forvejen - godt fanget.

Perfekt løsning, præcis hvad jeg skulle bruge - smid et svar og jeg godkender :-)
Avatar billede Lene Fredborg Ekspert
14. august 2009 - 09:36 #4
Kommer her.
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