tekstvlakken kopiëren naar een nieuw aan te maken document

Status
Niet open voor verdere reacties.

jackfish

Gebruiker
Lid geworden
10 sep 2010
Berichten
297
Ik heb word(2007)-formulier met een tabel en in elke cel een tekstvlak of een vervolgkeuzelijst.
Graag zou ik de mogelijkheid hebben om de inhoud van een aantal tekstvlakken te copieren naar een nieuw aan te maken document; een brief.
De tekstvlakken van het formulier moeten dan op een vaste plek in de brief komen.

Kan iemand mij aan de VBA-code helpen? Ik heb er inmiddels vierkante ogen van :-)

Het is mij wel gelukt om met een code de beveiliging eraf te halen, een dialoogventer te openen en een nieuw document te openen.

Alvast erg bedankt
 

Bijlagen

Cellen uit MS WORD kopieren

Waarom werkt u in WORD? Als u dit formulier in Excel opzet, is het eenvoudiger om rechtstreeks cellen uit het ene formulier naar het andere formulier te kopieren.

Tip voor VBA in Word:
- Neem een macro op met de volgende handelingen
- Zoek (CTRL+F) op "Postcode-woonplaats"
- Selecteer de hele tekst in een cel
- Kopieer de hele tekst naar een parameter (bijv. Pcode= tekst)
- Verwijder de "Postcode-woonplaats" uit deze tekst (Pcode=mid(20,Pcode,20)
- Plak Pcode op de juiste plek in het tweede Word-document
Het is te doen, maar omslachtiger dan werken in Excel.

Toen ik honderden Word-testrapporten moest analyseren, heb ik deze eerst gekopieerd en geplakt in een tijdelijk Excel-bestand. Vanuit dit tijdelijke Excel-bestand heb ik veel relevante gegevens in een veel compacter samenvattingsbestand geplaatst.
 
Als er toch een ander programma moet worden voorgesteld, dan zou ik eerder Access voorstellen, want zo'n formulier is bij uitstek vele malen makkelijker in een database te maken dan in Excel ;) Maar dat is geen antwoord op de vraag natuurlijk, net zo min als Excel voorstellen een oplossing is... Je zou de waarden uit je formulier kunnen toewijzen aan Public variabelen, die je bij het maken van een nieuw document weer kunt uitlezen en aan de overeeenkomende bladwijzers toekennen. Een voorbeeldje heb ik overigens nog niet; daar kan ik wel naar kijken als je er zelf niet uit komt.
 
Dank voor de reacties. Mijn collega's zijn niet bekend met Excel dat maakte de keuze voor Word (er zijn er zelfs die excel niet durven te openen). Dus OctaFish ik maak graag gebruik van jouw aanbod. Daarnaast is een formulier in Excel niet goed te krijgen als je in de lay-out onder elkaar verschillende vakken wilt maken. Nou ja, dat kan wel door samenvoegen, alleen is dan het instellen van de automatische rijhoogte niet mogelijk. Dat is wat in mijn formulier echt moet kunnen.
Waar ik overigens in deze context ook niet uitkom is het verschil in tekstvak (ze heten allebei zo) tussen het invoegen van een tekstvak via de menubalk en het ActiveX teksvak. De eerste past zich goed aan qua hoogte en houdt zich aan de breedte terwijl de ActiveX dat, zover ik begrijp, niet kan.
 
Laatst bewerkt:
Gebruik in die tweede brief velden voor documentvariabelen

De inhoud van die documentvariabele kun je zo vullen vanuit dit formulier:

Code:
Sub snb()
  With Documents.Open("E:\brief.doc")
    For j = 1 To UBound(sn)
        .Variables("veld" & j) = IIf(ThisDocument.Fields(j).Result = "", " ", ThisDocument.Fields(j).Result)
    Next
    .fields.update
    .saveas "E:\nieuwe brief 001.doc"
    .close 0
  End With
End Sub

Noch Excel, noch Access is een goede suggestie (want onnodig gecompliceerd) om dit te doen.
 
Dank je wel SNB voor de code. Ik probeer vandaag onder het bezoek aan mijn schoonmoeder uit te komen en ga het proberen ;-) Gr. Jackfish
 
SNB, dank voor de snelle reacties. Ik kom er allleen, tot mijn frustratie, niet uit. Ook met de verwijzing waar je eerder uitleg heb gegeven kom ik niet verder. Weet dat ik zo goed als onbekend met VBA.
De hierboven aangeboden SNB-code heb ik in 'de brief' geplakt via het VBA-project in 'thisdocument'.
Ik vraag mij af of ik in de beide documenten wel de juiste velden gebruik. Daarnaast zal er in de codes ook wel e.e.a. niet kloppen. SNB mag ik zo vrij zijn om aan je te vragen mijn documenten eens te bekijken en te zien waar het 'mis' gaat? Het wachtwoord is trouwns jackfish

Groet en dank in advance ... Jackfish

Bekijk bijlage Brief.docx
Bekijk bijlage Verslagformulier.docx

Code bij Verslagformulier, (thisdocument)

Code:
Private Sub Brief_Click()
    If ActiveDocument.ProtectionType <> wdNoProtection Then
       ActiveDocument.Unprotect Password:="jackfish"
    End If

    If MsgBox("Heeft u, voor zover dat mogelijk is, alle velden ingevuld?", vbYesNo, "Het secretariaat vraagt:") = vbNo Then Exit Sub

    If ActiveDocument.ProtectionType <> wdNoProtection Then
       ActiveDocument.Unprotect Password:="jackfish"
    End If

    ChangeFileOpenDirectory "path naar bestand"
    Application.Run MacroName:="Organisatienaam_UpdateCommandbars"
    Application.Run MacroName:="DoDocumentChangeEvent"
    Application.Run MacroName:="InitiateProcessEvent"
    Documents.Open FileName:= _
        "path naar bestand"_
        , ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, _
        PasswordDocument:="", PasswordTemplate:="", Revert:=False, _
        WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _
        wdOpenFormatAuto, XMLTransform:=""
    Application.Run MacroName:="Koppeling.cExternal.InitiateProcess"
End Sub

code bij brief (thisdocument)
Code:
Sub snb()
  With Documents.Open("path naar bestand")
    For j = 1 To UBound(sn)
        .Variables("" & j) = IIf(ThisDocument.Fields(j).Result = "", "", ThisDocument.Fields(j).Result)
    Next
    .Fields.Update
    .SaveAs "path van het bestand"
    .Close 0
  End With
End Sub
 
Laatst bewerkt door een moderator:
Zonder VBA gaat dit niet lukken.

Verdiep je daar dan eerst eens in. Kun je later nog veel plezier van beleven.
 
Het is dus niet zomaar uitgelegd. Ik had gehoopt dat ik met een voorbeeld of enkele aanwijzingen het formulier vlot zou kunnen trekken. Ik houd daarom de vraag nog wel even aan.

SNB, heb je nog tips waar online nuttige tutorials te vinden zijn?
 
Laatst bewerkt:
Ik heb een oplossing gevonden waarmee ik, als onbekende met VBA, toch een workaround heb gevonden voor mijn probleem. Een formulier waarvan de velden in een aparte brief gezet moest worden. Daarvoor gebruikte ik de volgende code
Code:
    Dim sMyString As String
    Selection.GoTo What:=wdGoToBookmark, Name:="beleid"
    sMyString = Selection.Text
    Selection.Copy
    Selection.GoTo What:=wdGoToBookmark, Name:="text13"
    Selection.Paste

Na het formulier handmatig een pagina-einde ingebracht en voila.

Dank aan een ieder die op mijn post heeft gereageerd. Jackfish
 
Laatst bewerkt door een moderator:
@jackfish Het is mij een raadsel waarom je verwijst naar een topic van augustus. Je doet het hier niet en daar verwijs is ik naar.
 
Huijb,

2 februari 2012 ???
 
Laatst bewerkt:
Dank voor de berichten. Ik vind het zo raar dat het zo ingewikkeld is.
Je hebt document 1, laten we zeggen het masterbestand. In dit geval een verslag waarin enerzijds data wordt weergegeven en anderzijds conclusies worden getrokken
En je wilt in document 2 en 3 (brieven aan verschillende mensen) dat bepaalde delen uit het masterbestand integraal wordt overgenomen. Nu moet ik steeds copy/pasten en van bestanden wisselen.
We leven in 2013!
Geen simpeler oplossing?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan