24. juni 2010 - 13:33Der er
8 kommentarer og 1 løsning
Hvordan overføres data fra Excel til Word
Jeg er ved at lave en Wordskabelon, hvor jeg ønsker at dokumentet skal kunne hente oplysninger fra Excel. For at anskueliggøre det, har jeg lavet et eksempel med 3 personer.
Eksempel: Regnearkets indhold:
Initialer Navn telefon mailadresse PEHA Per Hansen 50505050 peha@mail.dk HAIB Hans Ibsen 50505051 haib@mail.dk IBNI Ib Nielsen 50505052 ibni@mail.dk
(jeg starter med at indsætte et tekstfelt med bogmærkenavnet "Initialer"). På baggrund af initialerne skal dokumentet hente yderligere oplysninger fra regnearket.
Selve brevet: Din sagsbehandler er (fletfelt som henter navn fra regneark) tlf (fletfelt som henter telefon fra regneark) mail (fletfelt som henter mailadresse fra regneark) ______
Det er Word 2003. Men jeg er da i tvivl om det er brevfletning, som skal bruges i dette eksempel.
Hvis jeg tager udgangspunkt i mit eksempel, så er der 3 forskellige sagsbehandlere. Hvis f.eks. Per Hansen skal sende et brev, behøver han kun at indtaste sine initialer, og så udfyldes resten automatisk.
VBA er absolut en mulighed. Er der lighed mellem medarbejdernes brugerinitialer (logOn) og initialerne? Hvis ja - så kan alle data automatisk hentes uden videre.
Const stiTilxls = "C:\Documents and Settings\pb.KHNBPB\Skrivebord\brevSkabelon\2003-version\medarbejder.xls" '<--- tilpasses
Dim userInit As String, navn As String, telefon As String, mail As String Dim xlsDB As Object, xlsRække Private Sub Document_New() On Error GoTo fejl userInit = Application.UserInitials Set xlsDB = CreateObject("Excel.Application") With xlsDB .Workbooks.Open stiTilxls
xlsRække = findMedarbejder(userInit) If xlsRække > 0 Then navn = .Range("B" & CStr(xlsRække)) telefon = .Range("C" & CStr(xlsRække)) mail = .Range("D" & CStr(xlsRække))
indsætIword "navn", navn indsætIword "telefon", telefon indsætIword "mail", mail
lukXls Else MsgBox ("Medarbejder: " & userInit & " kunne ikke findes") lukXls Exit Sub End If
.Quit End With Exit Sub
fejl: Stop lukXls End Sub Private Function findMedarbejder(initialer) Dim r With xlsDB.ActiveWorkbook.Sheets(1) For r = 2 To 65000 If LCase(.Cells(r, 1)) = LCase(initialer) Then findMedarbejder = r Exit Function Else If .Cells(r, 1) = "" Then Exit For End If End If Next r End With findMedarbejder = 0 End Function Private Sub indsætIword(bm, tekst) ActiveDocument.Bookmarks(bm).Select Selection.TypeText Text:=tekst End Sub Private Sub lukXls() With xlsDB .Application.Quit End With
Jeg kan desværre ikke få det til at virke. Jeg har et problem med at indsætte den rette sti, da jeg har 3 forskellige stier til mit skrivebord, som jeg alle har afprøvet:
C:\Documents and Settings\laso\Skrivebord C:\Documents and Settings\All Users\Skrivebord C:\Documents and Settings\Administrator\Skrivebord
Jeg har lagt en kopi af "Medarbejdere.xls" i alle 3 stier, men når jeg afprøver skabelonen, kommer der en besked om, at medarbejderen ikke kan findes. Det passer dog ikke.
Dit stinavn ser jo noget anderledes ud. Jeg kan ikke blive klog på "pb.KHNBPB"-mappen, som jeg ikke har liggende. Er det noget som skal bruges? Jeg har prøvet at indkludere mappen i min sti, men så kommer der en fejl i VBS.
Jeg kan ikke gennemskue, hvordan VBA-koden finder ud af, hvilken sagsbehandler der er tale om, når man ikke indtaster initialer på forhånd i dokumentet.
Hvordan får jeg lagt de øvrige oplysninger fra regnearket ind i dokumentet? Sker det ved hjælp af bogmærker?
Det anvendes for at finde Excelfilen. Den enkelte medarbejders initialer hentes her: "userInit = Application.UserInitials"
der udføres et opslag i regnearket og data indsættes i dokumentet i bogmærker, der har samme navn som "etiketten" i Excel.
Har du fået mine filer? - ellers send en mail og jeg returnerer - @-adresse under profil.
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.