16. september 2010 - 23:17Der 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
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
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
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
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.
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"
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!
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)
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.