Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Anders (software)

excel informatie uit worddocs laten halen

None
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

    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

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