Avatar billede mrkr Juniormester
18. januar 2010 - 21:44 Der er 10 kommentarer og
1 løsning

Flytte tekst fra excel til word via makro

Jeg har nogle oplysninger stående i excel i arket "STAM"
I dette ark har jeg navngivet 4 celler:
* navn1
* navn2
* dato1
* dato2

I word har jeg et dokument/skabelon som jeg gerne vil have flette disse data ind i.

Wordfilen ligger på følgende placering: c:\dokumenter\flettefil.doc

Som jeg selv ser det, så er der 2 forskellige måder at løse det på. Jeg skal kun bruge en løsning, så det er op til jer hvilken løsning der skal laves.


Mulighed 1:
I wordfilen/skabelonen er der 10 tekst/flette felter
felt1-10

Nu skal data fra excelfelterne indsættes som følger:
excel    word
navn1 -> felt1 + flette felt3
navn2 -> felt2 + flette felt4
dato1 -> felt5 + flette felt7 + flette felt 9
dato2 -> felt6 + flette felt8 + flette felt 10

Mulighed 2:
I wordfilen kan jeg oprette en userform der hedder USERFORM1.
Denne userform indeholder 4 tekstboxe som hedder: tb1 + tb2 +tb3 + tb4

Nu skal data fra excelfelterne indsættes som følger:
excel    word
navn1 -> tb1
navn2 -> tb2
dato1 -> tb3
dato2 -> tb4

(herefter sørger jeg selv for via en makro at få flettet dataene ind i wordfilen.)

Jeg havde tænkt mig at få en makro / knap der åbner filen:
c:\dokumenter\flettefil.doc

og flytter dataene over som vist ovenfor.

Er der nogen der kan knække denne nød, eller er det helt umuligt?
18. januar 2010 - 22:53 #1
Avatar billede mrkr Juniormester
18. januar 2010 - 23:08 #2
Den giver lidt problemer.
Den laver fejl i denne linje....
Public gwdApp As Word.Application

og den skriver følgende fejl....
User-defined type not defined

Jeg er ikke specielt god til vba, så jeg håber at du vil hjælpe med at flytte data fra de fem celler til de 10 tekstfelter i word også :-)

Når dataene er flyttet skal word filen ikke gemmes eller lukkes.
Den skal bare have de rigtige data. Så gemmer jeg selv hvor den skal gemmes.
Avatar billede supertekst Ekspert
18. januar 2010 - 23:21 #3
Alternativ:
Når Userformen åbnes i Word hentes felterne i Excel-filen:

Dim xlsFil
Const xlsSti = "C:\stamFil.xls"
Private Sub UserForm_activate()
    Set xlsFil = CreateObject("Excel.Application")
    With xlsFil
        .workbooks.Open xlsSti
        Me.TextBox1 = .Range("navn1")
        Me.TextBox2 = .Range("navn2")
        Me.TextBox3 = .Range("navn3")
        Me.TextBox4 = .Range("navn4")
   
        .Application.Quit
    End With
   
    Set xlsFil = Nothing
End Sub
19. januar 2010 - 15:51 #4
Ja hovsa - du skulle have linket til den anden vej...
http://www.smartoffice.dk/Tips/LibrarySource.asp?App=Word&Lib=WordUsingExcel
Det er jo ikke specielt anderledes end det supertekst skriver - her er blot lidt fejl styring på, omkring hvis Excel er åben i forvejen eller ej.
Avatar billede mrkr Juniormester
19. januar 2010 - 20:37 #5
Da jeg ikke er super skrap til dette har jeg ikke kunne få det smartoffices til at virke og har derfor strikket det lidt anderledes sammen så jeg kan bruge supertekst løsning.

Her er min fremgangmåde:
1. Jeg står i et åbent dokument og kører en makro hvorved data fra den åbne fil eksporteres til excel fil c:\data\flettefil.xls)
2.Wordskabelonen åbnes
3. Word henter data fra flettefilen og indsætter i userform lige som supertekst har vist.

Men jeg kan bare ikke få indarbejdet i excel makroen at den skal åbne:
C:\data\flette forsøg.dot



Hvordan gør jeg det?

Jeg har indsat min kode nedenfor.




Sub export_Ekstern()
  Dim RK As Long, Data As Variant
    If vbYes = MsgBox("Er du sikker på at du vil eksportere data?", vbCritical + vbYesNo, "EXPORT") Then
    Application.ScreenUpdating = False
   
    Dim wb As Workbook
    Set wb = Workbooks.Open("c:\data\flettefil.xls", True, False)
   
        With ThisWorkbook.Sheets("stam")
           
            fkundenr = .Range("kundenr")
            fkundenavn0 = .Range("firmanavn0")
            fkundenavn = .Range("firmanavn1")
            fkundenavn2 = .Range("firmanavn2")
            fkundeadresse = .Range("firmaadresse")
            fpostby = .Range("firmapostogby")
           
            fperiodefra = .Range("i_år_startdato")
            fperiodetil = .Range("i_år_slutdato")
            fregnskabsår = .Range("regnskabsår")
        End With

        With wb.Sheets("flet")
           
            .Range("fletkundenr") = fkundenr  ' indsætter data fra andet ark
            .Range("fletkundenavn0") = fkundenavn0  ' indsætter data fra andet ark
            .Range("fletkundenavn") = fkundenavn  ' indsætter data fra andet ark
            .Range("fletkundenavn2") = fkundenavn2  ' indsætter data fra andet ark
            .Range("fletkundeadresse") = fkundeadresse  ' indsætter data fra andet ark
            .Range("fletkundepostby") = fpostby  ' indsætter data fra andet ark
            .Range("fletperiodefra") = fperiodefra  ' indsætter data fra andet ark
            .Range("fletperiodetil") = fperiodetil  ' indsætter data fra andet ark
            .Range("fletregnskabsår") = fregnskabsår  ' indsætter data fra andet ark
       
        End With
 
    Application.DisplayAlerts = False
    wb.Save
    wb.Close
    Application.DisplayAlerts = True
   
' *******************************
' her vil jeg så gerne starte Word, men kan ikke få den til at virke

    Dim wdApp As Word.Application
    Dim myDoc As Word.Document
    Dim mywdRange As Word.Range
    wdApp.Documents.Open ("C:\data\flette forsøg.dot")
 
    End If

End Sub
Avatar billede mrkr Juniormester
19. januar 2010 - 23:00 #6
Mit egentlige problem er faktisk kun at starte en .dot fil fra excel, så den starter som en skabelon.

Er der nogen der ved om det kan lade sig gøre, for så har er nøden knækket :-)
Avatar billede mrkr Juniormester
19. januar 2010 - 23:00 #7
Mit egentlige problem er faktisk kun at starte en .dot fil fra excel, så den starter som en skabelon.

Er der nogen der ved om det kan lade sig gøre, for så har er nøden knækket :-)
Avatar billede mrkr Juniormester
22. januar 2010 - 22:24 #8
Det er vist umuligt at åbne en .dot fil fra excel, hvor skabelonens startmakro køres, så den vej dropper jeg.

Hvis jeg kan få lidt mere hjælp til smartoffice først kode kan det være at det kan lykkes alligevel.

Det er vigtig at pointere at jeg står i en åben excelfil, som KONSTANT har nye data i cellerne NAVN1 + NAVN2 + DATO1 + DATO2

Imens jeg står i denne excelfil vil jeg gerne starte en wordfil og indsætte dataene fra disse 4 felter i nogle TEKSTFELTER i Word.
Tekstfelterne i Word hedder f.eks. flet1, flet2, flet3 og flet4.

Se koden nedenfor, hvor jeg tror jeg skal have lidt hjælp.....


Option Explicit
'Flemming Vadet, August 2001, fv@smartoffice.dk
'Ref.: Microsoft Word 9.0 Object Library

Public gwdApp As Word.Application
Public gwdDoc As Word.Document

Sub OpenNewWordDocument()
    Dim sFileToOpen As String
    Dim bWordStartedByMe As Boolean
   
    bWordStartedByMe = False
    sFileToOpen = "C:\data\flette.doc"
    Application.ScreenUpdating = False
   
    On Error GoTo ShitHappens
   
    ' Bruger Word hvis Word er åben ellers fejl
    Set gwdApp = GetObject(, "Word.Application")
    gwdApp.Visible = True
    gwdApp.Activate
   
    ' Tilføj din egen kode her - hvad skal der ske ?
    ' f.eks. åben et eksisterende dokument
    Set gwdDoc = gwdApp.Documents.Open(Filename:=sFileToOpen)

    '****************************************************
    'HER MANGLER JEG SÅ HJÆLP TIL AT FÅ FLYTTET TEKSTEN
    'EXCELFELTERNE dato1+dato2+navn1+navn2 TIL
    'WORD TEKSTFELTERNE felt1+felt2+felt3+felt4
    '******************************************************
   
   
    ' Luk word - her uden at gemme ændringer.
    If bWordStartedByMe Then
        'gwdApp.Quit SaveChanges:=False
    Else
        'gwdDoc.Close SaveChanges:=False
    End If
   
    GoTo ClearUp
   
ShitHappens:
    Select Case Err.Number
        Case 429
            ' Hvis Word ikke er startet
            Set gwdApp = CreateObject("Word.Application")
            bWordStartedByMe = True
            Resume Next
        Case Else
            Err.Clear
    End Select

ClearUp:
    Set gwdDoc = Nothing
    Set gwdApp = Nothing
End Sub
Avatar billede mrkr Juniormester
23. januar 2010 - 01:01 #9
Så fandt jeg selv ud af hvordan jeg fik data over til word.
Blind høne kan også finde korn :-)

Jeg satte dette ind i koden så gik det....

gwdDoc.FormFields(1).Result = ThisWorkbook.Worksheets("Stam").Range("navn1")
    gwdDoc.FormFields(2).Result = ThisWorkbook.Worksheets("Stam").Range("navn2")


Tak for indput og kodestumper.
Så mangler vi bare pointgivningen for jeres hjælp.
Avatar billede mrkr Juniormester
24. januar 2010 - 13:36 #10
Er der nogen der har et svar? :-)
Avatar billede supertekst Ekspert
04. juli 2010 - 12:08 #11
det får du så - omend lettere forsinket...
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