Vraag & Antwoord

Anders (software)

excel informatie uit worddocs laten halen

10 antwoorden
  • Ik heb een map met bestanden die allemaal gebaseerd zijn op eenzelfde formuliersjabloon gemaakt in Word 2000. Dus elk document bevat een aantal velden (8) die ingevuld zijn door een gebruiker. Nu is mijn vraag of het mogelijk is om in een exceldocument een knop te maken die uit alle bestanden de veldinformatie haalt. Dus 8 kolommen in excel en per rij de informatie per bestand weergeeft. Heeft iemand een idee of misschien een richting waarin ik zou kunnen beginnen? Alvast bedankt.
  • Op uw vraag of dit mogelijk is is het antwoord: [b:dc8763dc12]JA[/b:dc8763dc12] Maar ... dit is niet zo maar iets dat je op een uurtje in elkaar fikst. Eigenlijk is het nogal vrij complex! Nu weet ik niet of je erg bedreven bent in het programmeren in zowel VBA onder Excel, als in VBA onder Word, want daar komt het vooral op aan. Om te starten zou ik zeggen: maakt eerst de code aan in Excel die de afzonderlijke Word-bestanden uit de welbepaalde directory ophaalt, en plaatst de naam van ieder van deze bestanden in de rijen van de eerste kolom. Als je zover bent zien we wel verder... :wink:
  • De weg die E.Cle hier inslaat is er een met veel kuilen. Dat neemt niet weg dat een oplossing niet zo snel te geven is. Ik neem aan dat er nog steeds nieuwe bestanden bij komen die op deze sjabloon gebaseerd zijn en dat is weer meer programmeerwerk in VBA. Hier een andere suggestie: sla alle bestanden op als tekstbestand. vervolgens kun je met behulp van DATA > GET EXTERNAL DATA > IMPORT TEXT FILE de gegevens binnenhalen. Met behulp van wat pielen met macro's kom je er misschien wel uit, maar ik durf niks te garanderen
  • Avh zegt: [quote:96a565e3e1] Hier een andere suggestie: sla alle bestanden op als tekstbestand. vervolgens kun je met behulp van DATA > GET EXTERNAL DATA > IMPORT TEXT FILE de gegevens binnenhalen. [/quote:96a565e3e1] Ik vraag mij dan wel af hoe je een Word-document gaat opslaan als (puur) tekstbestand... En, in de veronderstelling dat dit [i:96a565e3e1]wél[/i:96a565e3e1] zou kunnen, hoe ga je dan de inhoud van de velden [i:96a565e3e1]op een eenvoudige manier[/i:96a565e3e1] extraheren. Ik denk dat je dan meer valkuilen gaat tegenkomen dan via een [i:96a565e3e1]rechtstreekse[/i:96a565e3e1] (lees: via VBA-programmatie) manier... Avh zegt: [quote:96a565e3e1] De weg die E.Cle hier inslaat is er een met veel kuilen. Dat neemt niet weg dat een oplossing niet zo snel te geven is. [/quote:96a565e3e1] Wat bedoel je 'met veel kuilen'? Dit is volgens mij de enige 'rechtstreekse' benadering voor de oplossing van dit vraagstuk. Dat het simpel is ontken ik met klem; het vraagt wel een vrij diepgaande kennis van VBA, van zowel de Word als de Excel kant...
  • Ok, Laten we dan maar het voorstel van E.Cle volgen en de listing uit de knowledge base gebruiken... (effe plakken in een nieuwe module (kijk op http://support.microsoft.com/default.aspx?scid=kb;en-us;213343&Product=xlw2K voor een beschrijving)) Sub Print_Dir_Contents() Dim Input_Dir, Print_File As String Input_Dir = InputBox("Input the path containing the files you " & _ "want to list on your worksheet" & Chr(13) & Chr(13) & _ "for example:C:\My Documents\*.*") If Input_Dir = "" Then Exit Sub ' If you want only to print a specific file type, you can ' substitute the "\*.*" with "*\.xl*" ' (for Excel files only) for the directory specified in the ' InputBox above. If Application.OperatingSystem Like "*Win*" Then Print_File = Dir(Input_Dir) & "\*.*" End If Range("a1").Select Counter = 1 Do While Len(Print_File) > 0 Worksheets(ActiveSheet.Name).Cells(Counter, 1).Value = _ Print_File Print_File = Dir() Counter = Counter + 1 Loop End Sub[url][/url] Maar eigenlijk begrijp ik nog niet zo goed waar we heen gaan... (E. Cle begrijp me goed, ik wil hier ook van leren en ben er niet op uit om je onderuit te halen o.i.d. Ik zie alleen niet welke kant je op wil en waar we gaan uitkomen. :wink:
  • Avh zegt: [quote:6586b6626e] Ik zie alleen niet welke kant je op wil en waar we gaan uitkomen. [/quote:6586b6626e] Hoe komt het toch dat ik het gevoel heb dat je sarcastisch klinkt?... Oké dan... Ik heb als testcase eerst zeven Word-documenten aangemaakt met elk acht 'fields' er in. Ieder van die velden zijn ingevuld met een waarde. Het Excel-bestand bevat een codemodule met twee subroutines. Op het hoofdblad (sheet) met de naam Blad1 plaatsten we een 'command button' die de procedure Public Sub Cmd_Generate(). Deze routine vraagt de gebruiker naar de locatie waar de te behandelen Word-documenten zich bevinden. Vervolgens wordt de procedure TraceFiles() opgeroepen (in Module1) met het ingegeven path als parameter. [code:1:6586b6626e] Public Sub Cmd_Generate() Dim Doc_Dir As String Doc_Dir = InputBox("Input THE PATH containing the Word-files," & Chr(13) & _ "for example: C:\My Documents\Docs") If Doc_Dir = "" Then Exit Sub TraceFiles Doc_Dir End Sub [/code:1:6586b6626e] Ik heb de code in de procedures (in module1) met inline documentatie verlucht opdat de code voor zichzelf kan spreken. [code:1:6586b6626e] Public Sub TraceFiles(ByVal Doc_Dir As String) Dim Doc_File As String Dim i As Integer Dim iRow As Integer Dim rRng As Range Doc_File = Dir(Doc_Dir & "\*.doc") ' Compose the header with the field numbers... For i = 1 To 8 With Cells(1, i + 1) .Value = i .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With Next i Application.ScreenUpdating = False ' Establish link to Word by late binding. ' Be sure you have set the reference to Microsoft Word! Dim wdApp As Object Set wdApp = CreateObject("Word.Application") wdApp.Visible = False iRow = 2 Do While Len(Doc_File) > 0 Set rRng = Cells(iRow, 1) TreatFile wdApp, rRng, _ Doc_Dir & Application.PathSeparator & Doc_File Doc_File = Dir() ' Get next Word document file... iRow = iRow + 1 Loop ' Exit Word and release Word object variable... wdApp.Quit Set wdApp = Nothing End Sub ' TraceFiles() ------------------------------------------------------------------ Private Sub TreatFile(ByVal wdApp As Word.Application, _ ByVal rRng As Range, _ ByVal DocFile As String) With wdApp ' Open the document... .Documents.Open Filename:=DocFile, ReadOnly:=True, _ Visible:=False, AddToRecentFiles:=False With .ActiveDocument Dim Fld As Field Dim OldProtectState As Integer Dim iCol As Integer iCol = 0 ' Be sure that the document isn't protected! If so, unprotect! OldProtectState = .ProtectionType If OldProtectState = wdAllowOnlyFormFields Then .Unprotect ' Print the name of the document. rRng.Offset(0, iCol) = .Name ' Loop through each field... For Each Fld In .Fields ' Set offset for the next column... iCol = iCol + 1 ' Put the content of the current field in the right cell... rRng.Offset(0, iCol) = Fld.Result Next Fld ' If the document was protected, reset his state... If OldProtectState <> wdNoProtection Then .Protect Type:=OldProtectState, NoReset:=True End If ' Prevent that Word ask you to save the file... .Saved = True ' Force Word not to ask this! .Close ' Close this document... End With End With End Sub ' TreatFile() [/code:1:6586b6626e] Het resultaat: [img] http://home2.planetInternet.be/tori0203/Img/CT_8-Fields_Result.gif [/img] Indien u de volledige Word- en Excel-documenten wenst te ontvangen om het zelf uit te testen, gelieve mij dan maar een berichtje te sturen...
  • Ik moet toegeven; ik vind het knap! De code staat reeds zorgvuldig gesaved op mijn pc. Die gaat nooit meer verloren! Ik hoop alleen dat de oorspronkelijke poster van dit bericht nog meekijkt, want daar was het tenslotte om te doen. Cle, Ik hoop dat ik je hier tegenkom als ik zelf ook nog eens een gecompliceerd ding probeer te fixen.
  • Bedankt voor het compliment! :wink: E.
  • Je hebt trouwens wel veel tijd om dit soort dingen even te fabrieken. Ik ben hiervoor altijd volledig afhankelijk van druilerige zaterdagavonden...
  • Oordeel niet te snel man! U zou er serieus van verschieten!

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.