• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Word velden importeren in Excel

Status
Niet open voor verdere reacties.

BartSt

Gebruiker
Lid geworden
26 jun 2012
Berichten
86
Beste mensen,

Ik heb een formulier in Word. Dat bestaat uit tekst en afbeeldingen, die niet kunnen worden aangepast (vergrendeld). Daarnaast zijn er velden, die mensen kunnen invullen. (Met de nodige invoerbeperkingen.)

Nu had ik graag op een efficiënte manier de waarden die mensen invullen in de velden, kunnen importeren in Excel. Eén formulier zou daarbij één rij moeten worden. De Word velden moeten m.a.w. elk belanden in hun eigen kolom in mijn Excel werkblad.

Kan dat?
 
Gewone formuliervelden, geen activeX. Ze komen allemaal van:

(Word 2010) Tabblad ontwikkelaars --> Besturingselementen
 
Laatst bewerkt:
vanuit Excel geredeneerd:

Code:
sub snb()
  with getObject("G:\OG\formulier.docx")
    for j=1 to .ContentControls.count
        cells(1,j)= .ContentControls(j).Range.Text
    Next
    .close 0
  end with
end sub
 
Bedankt, maar ik vrees dat VBA niet mijn sterkste kant is. Ik denk dat ik begrijp wat je code doet, maar waar zet ik die dan? En hoe voer ik die in praktijk uit?
 
vanuit Excel geredeneerd:
De code zet je in een standaardmodule in je XL-bestand.
Uitvoeren doe je via F8 - Macro selecteren - Uitvoeren, of je maakt er een knop voor waar je de macro dan aan verbindt.
 
Ok, die stappen zijn me gelukt. Ik heb een Excel bestand met een knop die bovenstaande macro lanceert. Excel vindt het bestand en ik krijg geen foutmeldingen. Het resultaat is echter niet wat ik had verwacht.

Ik heb in mijn formulier zowel tekst- als aanvinkvelden. Het lijkt erop dat enkel de aanvinkvelden in het Excel record worden gezet.

Wat kan ik daar aan doen?
 
Dat blijkt niet uit het door jou geplaatste bestand.
 
Als VBA niet 'je sterkste kant' is, kun je beter het formulier opslaan, waarbij alleen de resultaten van de invulvelden worden opgeslagen.
Als je het toch met VBA wil doen:

Code:
sub snb()
  with getObject("G:\OF\formulier.docx")
    ReDim sn(.FormFields.Count + .ContentControls.Count)
    
    For j = 1 To .FormFields.Count
        sn(j - 1) = .FormFields(j).Result
    Next
    For j = 1 To .ContentControls.Count
        If .ContentControls(j).Type = 8 Then sn(j + .FormFields.Count - 1) = .ContentControls(j).Checked
        If .ContentControls(j).Type = 6 Then sn(j + .FormFields.Count - 1) = .ContentControls(j).Range.Text
    Next
    .close 0
  end with

  sheets(1).cells(1).resize(Ubound(sn)+1)=application.transpose(sn)
end sub
 
Snb, dat werkt goed, bedankt!

Kan ik nog iets doen om ervoor te zorgen dat alle gegevens in één rij komen ipv in één kolom?
 
Code:
Sheets(1).Cells(1).Resize(, UBound(sn) + 1) = sn
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan