Avatar billede goodwill Nybegynder
28. april 2001 - 21:15 Der er 28 kommentarer og
1 løsning

Åbne vindue i word

Hej :-)
er der en hjælpsom sjæl, som kan give mig et lynhurtigt svar på følgende:
Jeg skal åbne et kendt worddokument fra Excel97, rette focus fra Excel til Word og læse wordfilen.
Når jeg så har kigget ...længe...så skal jeg have en makro i word, som lukker det kendte worddokument og smider mig tilbage til excel (som er åben). Word skal ikke nødvendigvis lukkes.

Håber på et hurtigt svar,
Goodwill
28. april 2001 - 21:33 #1
Du opretter en kodemodul i Excel, hvor du under Tools/References markerer \"Microsoft Word 8.0 Object Library\"

Så kopierer du følgende ind:
Option Explicit
\'***********************************************
\'*** Ref.: Microsoft Word 8.0 Object Library ***
\'***********************************************
Public WordApp As Word.Application
Public WordDoc As Word.Documents

Sub OpenWordDoc()
Dim MyRapNo As String
Dim FileToOpen As String
    FileToOpen = \"D:\\Dokumenter\\bøger.doc\"
    Application.ScreenUpdating = False
   
    On Error GoTo ShitHappens
   
    \'Starter word
    Set WordApp = GetObject(, \"Word.Application\")
    WordApp.Visible = True
    WordApp.Activate
    WordApp.Documents.Open Filename:=FileToOpen

  Exit Sub
ShitHappens:
  Select Case Err.Number
    Case 429
      \'Hvis Excel ikke er startet
      Set WordApp = CreateObject(\"Word.Application\")
      Resume Next
    Case Else
      \'Err.Raise Err.Number
  End Select

End Sub

Når du vil lukke dokumentet i Word, så kan det gøres på mange forskellige måder, om du nødvendigvis skal have en makro hertil !!!
Hvis makro\'en skal laves i et tilføjelsesprogram, så kan jeg sende dig en lille vejledning hertil.
28. april 2001 - 21:33 #2
Hurtigt nok :-)
Avatar billede goodwill Nybegynder
29. april 2001 - 00:17 #3
flemmingdahl,
udmærket indangsvinkel.
(, \"Word.application\") har jeg en fornemmelse af er forkert.
Men skal ikke kunne sige det, mit problem ligger i, at wordapp (i din kode) ikke er defineret ...nok fordi den mangler at blive defineret som noget kendt; word.application kender min excel ikke??
ken du løse det problem er pointene dine :o)
Avatar billede janvogt Praktikant
29. april 2001 - 00:48 #4
Jeg vedlægger lige lidt kode, som viser, hvordan du kan styre Word fuldstændig fra Excel.

Første rutine danner et Word-dokument, hvor der indsættes 50 linier.
Anden rutine læser fra Word-filen de linier som indeholder et ettal - altså 1,10,11,12,13,14,15,16,17,18,19,21,31,41 og lægger dem ind i et nyt Excel-dokument.

Husk, at når du står i kodebilledet i Excel skal du under i menuen under FUNKTIONER->REFERENCER lige markere \"Microsoft Word 8.0 Object Library. Måske er det også det du mangler for at få Flemmings kode til at virke.

Sub CreateNewWordDoc()
\' to test this code, paste it into an Excel module
\' add a reference to the Word-library
\' create a new folder named C:\\dokumenter or edit the filnames in the code
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim i As Integer
    Set wrdApp = CreateObject(\"Word.Application\")
    wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Add \' create a new document
    \' or
    \'Set wrdDoc = wrdApp.Documents.Open(\"C:\\dokumenter\\Filename.doc\") \' open an existing document
    \' sample word operations
    With wrdDoc
        For i = 1 To 50
            .Content.InsertAfter \"Her er en test linie #\" & i
            .Content.InsertParagraphAfter
        Next i
        If Dir(\"C:\\dokumenter\\MyNewWordDoc.doc\") <> \"\" Then
            Kill \"C:\\dokumenter\\MyNewWordDoc.doc\"
        End If
        .SaveAs (\"C:\\dokumenter\\MyNewWordDoc.doc\")
        .Close \' close the document
    End With
    wrdApp.Quit \' close the Word application
    Set wrdDoc = Nothing
    Set wrdApp = Nothing
End Sub


Sub OpenAndReadWordDoc()
\' assumes that the previous procedure has been executed
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim tString As String, tRange As Word.Range
Dim p As Long, r As Long
    Workbooks.Add \' create a new workbook
    With Range(\"A1\")
        .Formula = \"Word Document Contents:\"
        .Font.Bold = True
        .Font.Size = 14
        .Offset(1, 0).Select
    End With
    r = 3 \' startrow for the copied text from the Word document
    Set wrdApp = CreateObject(\"Word.Application\")
    \'wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Open(\"C:\\dokumenter\\MyNewWordDoc.doc\")
    \' sample word operations
    With wrdDoc
        For p = 1 To .Paragraphs.Count
            Set tRange = .Range(Start:=.Paragraphs(p).Range.Start, _
                End:=.Paragraphs(p).Range.End)
            tString = tRange.Text
            tString = Left(tString, Len(tString) - 1) \' exclude the paragraph-mark
            \' check if the text has the content you want
            If InStr(1, tString, \"1\") > 0 Then \' fill into active worksheet
                ActiveSheet.Range(\"A\" & r).Formula = tString
                r = r + 1
            End If
        Next p
        .Close \' close the document
    End With
    wrdApp.Quit \' close the Word application
    Set wrdDoc = Nothing
    Set wrdApp = Nothing
    ActiveWorkbook.Saved = True
End Sub
29. april 2001 - 10:10 #5
goodwill - beklager men din fornemmelse er forkert - hvis Word er installeret, så hedder det Word.Application uanset din fornemmelse.

Jeg tror, at du har glemt at sætte reference til Microsoft Word 8.0 Object Library, for Excel kender ikke word, hvis ikke dette er gjort.
29. april 2001 - 10:18 #6
jan-> der er ingen af de to makro\'er, som løser goodwill\'s problemstilling. Den første åbner et nyt dokument, og den anden henter første linie i hver Paragraph ind i en ny mappe i excel.

Goodwill>> jeg har testet makro\'en igen - den virker perfekt - prøv igen.
Avatar billede janvogt Praktikant
29. april 2001 - 10:33 #7
>>> Flemming

Hvis du kigger ordentlig efter kan du jo se jeg giver en beskrivelse at, hvad makroerne gør. Og som du kan læse skriver jeg, at det er eksempler på, hvordan man kan styre Word fra Excel!
Mange gange åbner det op for nye muligheder når man ved, hvilke muligheder man har.
Desuden kan du jo se de forskellige kommandoer ud fra koden.

Din makro løser jo heller ikke alt det goodwill spørger om!
Avatar billede janvogt Praktikant
29. april 2001 - 10:38 #8
Eller sagt lidt kreativt:

Hvis en mand ber\' om en fisk, fordi han er sulten, kan det godt være, at han i længden bliver mere taknemmelig, hvis du giver ham en fiskestang og lærer ham at fiske. :-)
29. april 2001 - 10:38 #9
>>>jan - beklager jeg fik ikke læst \"eksempler\".

Jeg mener nu, at min makro løser det hele :-) når han er færdig med at læse i word, skal word blot minimeres eller afsluttes og Excel ligger bagved og venter pænt.
Avatar billede janvogt Praktikant
29. april 2001 - 10:56 #10
Det er jo såre simpelt bare at åbne et kendt Word-dokument fra Excel:

Sub OpenWordDoc()
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
    Set wrdApp = CreateObject(\"Word.Application\")
    wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Open(\"C:\\dokumenter\\MitWordDoc.doc\")
End Sub
29. april 2001 - 11:07 #11
Ja, jan det er det, men så kan man jo også tage højde for, om Word er åben i forvejen eller ej - derfor denne lille error handler i min første makro.
Nå Jan ikke mere diskution herom - der er vist en brugbar løsning - nu skal det blot virke hos goodwill.

God søndag - jeg vil i haven :-)
Avatar billede goodwill Nybegynder
01. maj 2001 - 15:50 #12
Hej begge to,
jeg har fået referencen til word 8.0 object library ind i billedet og Flemmings makro virker!

Har pyntet lidt på filplaceringen af dokumentet, da det er rart at kunne rette filplaceringen, hvis koden er beskyttet.

Sub OpenWordDoc()

\'Nødvendige input:
\'Public Const HelpFilename = \"HjælpMigLige.DOC\"
\' i kodemodul.
\'Celleværdi celle A2 i ark(\"filplacering\")= C:\\dokumenter\\
\' i regnearket.

Dim MyRapNo As String
Dim FileToOpen As String

Dim HelpPath As String
HelpPath = ActiveWorkbook.Worksheets(\"filplacering\").Cells(1, 2)

Dim FullHelpfileName As String
FullHelpfileName = HelpPath & HelpFilename
 
FileToOpen = FullHelpfileName

\'derefter magen til Flemming\'s makro.

Til gengæld vil jeg gerne lukke word dokumentet ned med en makro? jf. spørgsmålet!

:o)
Goodwill
Avatar billede janvogt Praktikant
01. maj 2001 - 18:22 #13
Hvis du vælger at bruge Flemmings løsning vil følgende VBA-kode lukke Word:

WordApp.Quit

Den kan du også finde i ovenstående kode.
Avatar billede goodwill Nybegynder
01. maj 2001 - 18:49 #14
Hej Jan,
ja, koden lukker word, men hvad nu hvis du ikke har lyst til at lukke alle de dokumenter du har aktive i word. Og, hvad trigger koden?
Den skal heller ikke gemme ændringer, det er bare et hjælpedokument man kigger i og forlader uændret(i den forbindelse havde jeg tænkt mig en application.close save=false i en wordmakro).
:-)
Goodwill
Avatar billede janvogt Praktikant
01. maj 2001 - 20:35 #15
WordDoc.Close lukker dokumentet.
Avatar billede goodwill Nybegynder
01. maj 2001 - 20:49 #16
Venter lige på Flemmings kommentar
:o)
Goodwill
02. maj 2001 - 07:13 #17
:-) takker Goodwill - min kommentar kommer her i formiddag :-)
02. maj 2001 - 08:49 #18
Goodwill prøv med denne kode :-)

HUSK referencen....!

\'*****************************************
\'*** Reference to                      ***
\'*** Microsoft Excel 9.0 Object Libery ***
\'*****************************************

Sub LukHopTilExcel()
\'Definerer variabler til Excel-standard objecter
    Dim xlApp As Excel.Application
   
    \'Vælg en af disse 3 alt efter dit ønske
    \'ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
    \'ActiveDocument.Close SaveChanges:=wdSaveChanges
    ActiveDocument.Close SaveChanges:=wdPromptToSaveChanges
   
    Set xlApp = GetObject(, \"Excel.Application\")
    xlApp.Visible = True
 
End Sub
Avatar billede goodwill Nybegynder
02. maj 2001 - 17:32 #19
Hej Flemming,
Koden virker indtil Set xlApp = GetObject
Der skiftes ikke til excel.
Jeg kom lige i tanke om...skal de Set = Obj både i første og sidste kode ikke sættes til Nothing inden End Sub?

:o)
Goodwill
02. maj 2001 - 19:31 #20
Har du lavet reference til MS Excel 9.0 O. L.....!

Jo - det er rigtig programmering, at starte med Set xlApp = Get.... og slutte af med Set xlApp = Nothing.

Det virker perfekt hos mig !
Avatar billede goodwill Nybegynder
02. maj 2001 - 20:44 #21
Hej,

JA, men jeg har kun Excel 8.0 Object library, kan det have nogen indflydelse?

Goodwill
02. maj 2001 - 20:46 #22
Rigtigt Excel 8.0 er til Office97 og 9.0 er til Office2000 - ingen forskel for denne kodestump
Avatar billede goodwill Nybegynder
02. maj 2001 - 22:30 #23
Men det virker altså ikke, desværre.
:-)
Goodwill
02. maj 2001 - 23:07 #24
Hmmm - det forstår jeg ikke helt - det virkede fint hos mig, men nu har jeg også problemer...!

Havde det være den anden vej, altså vis word, så findes der wdApp.Activate, men den findes ikke fra Word til Excel - altså xlApp.Activate....

Jeg skal på tur med firmaet i nogle dage, men jeg vil kigge yderligere på den del, når jeg kommer hjem. Vi skal nok få det løst også :-)
02. maj 2001 - 23:10 #25
Lige en hurtig tanke.
Måske disse linier kan hjælpe !!
Dim xlWrk As Excel.Workbooks
under Set xlApp....
Set xlWrk = xlApp.ActiveWorkbook
nederst...
xlWrk.Activate
???? Prøv det !!! Godnat :-|
Avatar billede goodwill Nybegynder
02. maj 2001 - 23:13 #26
Okay,

det må jeg så vente på :o), med mindre jeg finder nyttigt stof hos microsoft, men synes nu jeg har kigget længe nok på deres knowledge base uden at få løst noget.

Goodwill
Avatar billede goodwill Nybegynder
02. maj 2001 - 23:14 #27
Og god tur forresten..... :o)
Avatar billede goodwill Nybegynder
03. maj 2001 - 12:12 #28
Hej Flemming,
Fandt en løsning på returnering til Excel, som du måske også kan have glæde af:

Private Sub forlad()
\'koden lagt ind under ThisDocument
Dim mytask As Object

If Tasks.Exists(\"Microsoft Excel\") = True Then
    Tasks(\"Microsoft Excel\").Activate
    Tasks(\"Microsoft Excel\").WindowState = wdWindowStateMaximize
    ActiveDocument.Close SaveDocument = False
End If

End Sub


Jeg havde et problem med at Word lå og rodede rundt midt på skærmen minimeret, så jeg har tilføjet til koden i Excel efter...
WordApp.Documents.Open Filename:=FileToOpen
WordApp.WindowState = wdWindowStateMaximize

Synes selv det ser rimeligt ud, håber du giver mig ret ;o)

Hermed points for opgaven og tak for hjælpen
Goodwill


04. maj 2001 - 21:52 #29
Ja, jeg havde ikke fundet på at løbe den vej rundt, men det virker :-) godt gået.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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