Avatar billede gladhund Nybegynder
16. september 2010 - 23:17 Der er 12 kommentarer og
1 løsning

Åbne og SaveAs med Word-fil inde fra Excel

Hej,

Jeg har sti+filnavn på en række Wordfiler i celler i Excel, en i hver. Jeg har brug for, at en bruger kan vælge en af dem, og så:
1. åbnes dokumentet og Gem som dialogboksen kommer frem
2. brugeren vælger sti og filnavn og trykker Gem som
3. sti og filnavn bliver gemt og skrevet i en anden celle, i et andet ark
4. det oprindelige word-dokument lukkes
5. det nye word-dokument lukkes
6. excel aktiveres igen

Håber nogen kan hjælpe :)
Avatar billede Thyge Nybegynder
17. september 2010 - 13:41 #1
Skal dokumentet åbnes så man kan se det inden der gemmes eller skal det blot gemmes under et selvvalgt navn?
Avatar billede Thyge Nybegynder
17. september 2010 - 14:43 #2
Det vil blive en lang forklaring. Det nemmeste vil være hvis du prøver at sende det.

Men du kan komme en smule af vejen ved at bruge nedenstående vba-kode:

Sub GemWordSom()
'For at det virker skal du I VB-editoren klikke "Tools", "References" og
'tilføje "Microsoft Word 12.0 Object Library" (eller den version du bruger)

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

    On Error Resume Next
    Set wrdApp = GetObject(, "Word.Application")
    If Err.Number <> 0 Then
        Set wrdApp = CreateObject("Word.Application")
    End If
    On Error GoTo 0

    Set wrdDoc = wrdApp.Documents.Open(Range("A2").Value) 'Den kører nu for det filnavn som er i celle A2
        wrdApp.Dialogs(wdDialogFileSaveAs).Show
        wrdApp.Quit

End Sub
Avatar billede gladhund Nybegynder
17. september 2010 - 16:08 #3
Tak for det :)!

Brugeren behøver ikke at se dokumentet, for det gemmes i excel-filen med et link, så han kan åbne det efterfølgende.

Jeg tester lidt med koden og vender tilbage. Jeg har ikke noget at sende, for det skal laves fra bunden...
Avatar billede gladhund Nybegynder
17. september 2010 - 16:12 #4
Laver din kode ikke et nyt word-dokument? Den skal åbne et eksisterende (sti inkl. filnavn står i fx A1) og gemme det med et nyt navn, som fx står i A2.

Jeg har selv en kodebid, der åbner et eksisterende dokument, så måske er det nok med min og din kode slået sammen:

Sub OpenWordDoc()
Dim objWord As Word.Application
Dim docWord As Word.Document
Dim stitilskabelon

stitilskabelon = Sheets("Dokumentation").Range("F5").Value

Set objWord = New Word.Application
objWord.Visible = True
Set docWord = objWord.Documents.Open(Filename:=stitilskabelon)

End Sub
Avatar billede gladhund Nybegynder
17. september 2010 - 17:11 #5
Og så skal brugeren selv vælge placering og navn. Og den sti skal gemmes i en celle.
Avatar billede anlu Nybegynder
17. september 2010 - 19:24 #6
Hvis bare du skal kopiere word-filen og brugeren ikke skal se filen, hvorfor så ikke bare kopiere-filen efter at have bedt brugere om at vælge lokation:

    Dim fso As Object
    nytnavn = Application.GetSaveAsFilename()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CopyFile orignaltnavn, nytnavn
(herefter gemme nytnavn i den celle du vil - hvor originaltnavn selvf. er stien til det oprindelige dokument)

Her kan du i øvrigt give GetSaveAsFilename nogle parametre, ift. hvilke filtyper der skal vises mv.
Avatar billede anlu Nybegynder
17. september 2010 - 19:39 #7
Ups - copy-paste-fejl: der havde lige sneget sig en "Dim fso"-statement for meget ind...
Avatar billede gladhund Nybegynder
17. september 2010 - 20:01 #8
Hey anlu :)

OK, lyder jo rigtig nok, men jeg kan ikke helt tyde koden... Kan du forklare hvad der sker i linjerne?
Avatar billede anlu Nybegynder
17. september 2010 - 22:34 #9
Jeg antager at brugeren har valgt en fil og at du har filnavnet (inkl. fuld sti) gemt i en streng med navnet originaltnavn. Antager at nytnavn er en streng. (Regner med at du ved hvordan du kan gøre dette?)

Dim fso as Object ' her erklærer vi en variabel af typen object ved navn fso

nytnavn = Application.GetSaveAsFilename() ' her åbnes en "Gem som"-dialogboks hvor brugeren kan vælge sti og filnavn, og filnavnet returneres til variablen nytnavn.
' Der bør efterfølgende være noget fejlhåndtering i tilfælde af at brugeren trykker "Cancel" i stedet for "Save".

Set fso = CreateObject("Scripting.FileSystemObject") ' her laver vi et FileSystemObject og sætter fso-variablen til at referere til det. FileSystemObject er et objekt som kan udføre forskellige fil-operationer.

fso.CopyFile originaltnavn, nytnavn ' her beder vi fso-objektet om at kopiere filen med "originaltnavn" til stien "nytnavn"

Blev det klarere?
Avatar billede gladhund Nybegynder
18. september 2010 - 00:11 #10
Meget klarere, tak :).

Jeg prøver det af i morgen, og melder tilbage.
Avatar billede gladhund Nybegynder
18. september 2010 - 00:31 #11
Jeg fandt lige et par linjer til at lukke det originale dokument og Word ned til sidst, så nu virker det helt, og ser sådan her ud:

Sub OpenWordDoc()

'Åben skabelon fra kendt sti
Dim objWord As Word.Application
Dim docWord As Word.Document
Dim stitilskabelon

'vælg sti
stitilskabelon = Sheets("Dokumentation").Range("F5").Value

Set objWord = New Word.Application
objWord.Visible = True
Set docWord = objWord.Documents.Open(Filename:=stitilskabelon)

'luk som kopi
Dim fso As Object
nytnavn = Application.GetSaveAsFilename()
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile stitilskabelon, nytnavn
Sheets("Dokumentation").Range("F6").Value = nytnavn

'luk skabelon og Word

objWord.Application.Quit wdDoNotSaveChanges
Set objWord = Nothing

End Sub


Jeg har brugt anlu's løsning, så smid endelig et svar - og også tak til C_Thyge for bidraget!
Avatar billede anlu Nybegynder
18. september 2010 - 12:33 #12
Hejsa,

Fint at du fik det til at virke - men du får lige et par ekstra kommentarer med :-)

Min pointe var at du faktisk slet ikke behøver åbne word-dokumentet medmindre du gerne vil vise det til brugeren. Jeg vil mene at din kode stadig vil virke hvis du fjerner linjerne vedr. word, dvs:

Sub OpenWordDoc()

Dim stitilskabelon

'vælg sti
stitilskabelon = Sheets("Dokumentation").Range("F5").Value

' kopier fil
Dim fso As Object
nytnavn = Application.GetSaveAsFilename()
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile stitilskabelon, nytnavn
Sheets("Dokumentation").Range("F6").Value = nytnavn

End Sub

(Desuden får du nok en fejl, hvis brugeren vælger "Cancel" i "Gem som"-dialogen, så det bør du overveje hvordan du vil håndtere - jeg vil tro at nytnavn i så fald bliver en tom streng, men har ikke tjekket det)
Avatar billede gladhund Nybegynder
18. september 2010 - 12:39 #13
Du har helt ret - tak for de ekstra comments :)
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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

IT-JOB

IT-Universitetet i København

CIO

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger chef for Lokal IT i hovedstadsområdet

Politiets Efterretningstjeneste

AI/ML udvikler i PET