Avatar billede tt2002 Nybegynder
24. marts 2006 - 13:25 Der er 9 kommentarer og
1 løsning

VBA Excel: Åbne og redigere i wordfil

Jeg har en makro i excel, der gerne (bl.a.) skulle kunne åbne en wordfil, lave nogle få ændringer og derefter gemme den under et nyt navn.

Kan dette lade sig gøre og i så fald hvordan?
Avatar billede supertekst Ekspert
24. marts 2006 - 16:47 #1
Du får et lille eksempel.....senere
Avatar billede supertekst Ekspert
24. marts 2006 - 16:57 #2
VBA-koden: -kan evt. tilknyttes en knap

Dim wDok As Object
Sub håndteringAfDok()
    Set wdoc = CreateObject("Word.application")
   
    With wdoc
        .documents.Open ("d:\Eksperten\Word.doc")
        .wordbasic.Insert "Denne tekst sættes ind i dokumentet"
        .activedocument.SaveAs "d:\Eksperten\Word2.doc"
        .activedocument.Close
    End With
   
    Set wdoc = Nothing
End Sub
Avatar billede tt2002 Nybegynder
25. marts 2006 - 02:08 #3
Hvordan gør jeg hvis jeg vil indsætte tekst, der ikke skal indsættes allerførst i dokumentet, men f.eks. 3 linier nede og 5 indryk inde?
Avatar billede supertekst Ekspert
25. marts 2006 - 10:46 #4
Indspil en makro i Word, der illustrerer, det du vil og indsæt det i XLS-VBA-koden:

I xls-VBA: aktiver referencen til Microsoft Word  1x.0 (Tools/References)

Dim wDok As Object
Sub håndteringAfDok()
Dim linieNr, antalIndryk

    Set wDok = CreateObject("Word.application")
   
    With wDok
        .documents.Open ("d:\Eksperten\Word.doc")
       
        linieNr = InputBox("Linienr: ")
        antalIndryk = InputBox("Antal indrykninger: ")
       
        positionerIWord Val(linieNr), Val(antalIndryk), wDok
        .wordbasic.Insert CStr(Cells(1, 1))        'indsæt værdi fra Excel
       
        .activedocument.SaveAs "d:\Eksperten\Word2.doc"
        .activedocument.Close
    End With
   
    wDok.Application.Quit
    Set wDok = Nothing
End Sub
Sub positionerIWord(lNr, aIndryk, wd As Object)
Dim i
    With wd
        .Selection.HomeKey Unit:=wdStory
        .Selection.MoveDown Unit:=wdLine, Count:=lNr
       
        For i = 1 To aIndryk
            .Selection.Paragraphs.Indent
        Next i
    End With
End Sub
Avatar billede tt2002 Nybegynder
25. marts 2006 - 14:38 #5
OK...

Jeg har aktiveret Microsoft Word 11.0 Object Library i References.

Jeg har indskrevet håndteringAfDok() i VBA Excel og positionerIWord(...) i VBA Word under det dokument, jeg skal åbne.

Jeg får nu fejlmeddelelsen:
"compile error: sub or function not defined"
mht. positionerIWord(...)-linien i håndteringAfDok().

Jeg forsøgte med mig at indsætte et punktum først i linien sådan at den kom til at hedde
.positionerIWord Val(linieNr), Val(antalIndryk), wDok
men nu får jeg fejlmeddelelsen:
"run-time error '438': object doesn't support this property or method"

Hvad skal jeg gøre anderledes?
Avatar billede supertekst Ekspert
26. marts 2006 - 09:28 #6
Hele koden skal være i Excel - således at man i givet fald kan anvende andre word-dokumenter! Dette er p.t. ikke muligt- men via en userform i Excel kunne dette lade sig gøre, hvis dette var ønskeligt.
Avatar billede tt2002 Nybegynder
27. marts 2006 - 19:46 #7
ok... det virker rigtig godt, bortset fra en ting: filen skal blive ved med at være åben. Word skal altså ikke lukke ned.
Avatar billede supertekst Ekspert
28. marts 2006 - 09:11 #8
Godt ....

Hvis det er Word-dok. under det nye navn, der skal være åbent - så ser VBA-kode således ud - altså 3 linier deaktiveret - een tilføjet:


Dim wDok As Object
Sub håndteringAfDok()
Dim linieNr, antalIndryk

    Set wDok = CreateObject("Word.application")
   
    With wDok
        .documents.Open ("d:\Eksperten\Word.doc")
       
        linieNr = InputBox("Linienr: ")
        antalIndryk = InputBox("Antal indrykninger: ")
       
        positionerIWord Val(linieNr), Val(antalIndryk), wDok
        .wordbasic.Insert CStr(Cells(1, 1))        'indsæt værdi fra Excel
       
        .activedocument.SaveAs "d:\Eksperten\Word2.doc"
'        .activedocument.Close
    End With
   
    wDok.Visible = True
   
'    wDok.Application.Quit
'    Set wDok = Nothing
End Sub
Sub positionerIWord(lNr, aIndryk, wd As Object)
Dim i
    With wd
        .Selection.HomeKey Unit:=wdStory
        .Selection.MoveDown Unit:=wdLine, Count:=lNr
       
        For i = 1 To aIndryk
            .Selection.Paragraphs.Indent
        Next i
    End With
End Sub
Avatar billede tt2002 Nybegynder
28. marts 2006 - 14:42 #9
mange tak for hjælpen...
Avatar billede supertekst Ekspert
28. marts 2006 - 15:37 #10
Selv tak.....
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