28. april 2001 - 21:15Der 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.
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.
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)
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
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.
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!
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. :-)
>>>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.
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
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.
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!
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
\'***************************************** \'*** 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
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?
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 :-|
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.
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
Ja, jeg havde ikke fundet på at løbe den vej rundt, men det virker :-) godt gået.
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.