Samenvoegveld naam in VBA (Word)

Status
Niet open voor verdere reacties.

Withaar

Verenigingslid
Lid geworden
8 apr 2001
Berichten
3.551
Ik heb een Word document waar ik samenvoegvelden in heb staan.
Nu kan ik met;
MsgBox (ActiveDocument.Fields(1).Result.Text)
wel de inhoud van het veld als tekst krijgen en zoals hier laten zien in een Msgbox.
Probleem is dat de 'gezochte waarde' in het eerste veld moet staan.

De waarde die ik zoek kan echter ook in een ander veld staan, bv de 3 of 12e.
Elk veld heeft binnen Word ook een naam, deze is gelijk aan de kolomkop naam van het bestand dat je hebt gebruikt voor het samenvoegen.
Is het ook mogelijk op deze naam van het veld, in mijn geval «Cursustypecode» te zoeken? In dat geval maakt het niet uit in welk veld nummer (field(x)) de gezochte waarde staat, ik kan de eerst controleren op de naam van het veld en dan de waarde uit het gevonden veld gebruiken.
 
ActiveDocument.Fields(ref).Code.Text

Ik ben er uit.

Met ActiveDocument.Fields(ref).Code.Text
Krijg je niet de veldnaam in dit geval; Cursustypecode, maar de tekst: MERGEFIELD "Cursustypecode" (letterlijk zó)

Met onderstaande code krijg ik het veldnummer van het mergeveld met de betreffende tekst.
En vervolgens de eerste waarde onder deze kolom kop uit het samenvoeg bestand.

Code:
Sub Fieldnaam_nummer()
Dim ref As Single
'lees de veldname
For ref = 1 To ActiveDocument.Fields.Count
    ' Mid gebruiken om alleen op de tekst Cursustypecode te zoeken in de gevonden veldnamen: MERGEFIELD "<veldnaam>"
    If Mid(ActiveDocument.Fields(ref).Code.Text, 14, 14) = "Cursustypecode" Then
       MsgBox (ref)
    End If
Next

MsgBox (ActiveDocument.Fields(ref).Result.Text)


End Sub

Voor wie interesse heeft m'n hele code:

Code:
Sub TB()
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "*@*"
        .Replacement.Text = ""
    End With
Selection.Find.Execute
    Dim myrange As Range
    Set myrange = ActiveDocument.Range
Dim ref As Single
Dim reftxt As String
' lees de veldnamen
For ref = 1 To ActiveDocument.Fields.Count
       ' Mid gebruiken om alleen op de tekst Cursustypecode te zoeken in de gevonden veldnamen: MERGEFIELD "<veldnaam>"
       If Mid(ActiveDocument.Fields(ref).Code.Text, 14, 14) = "Cursustypecode" Then
           ' MsgBox (ActiveDocument.Fields(ref).Code.Text & ":" & ref & ":" & ActiveDocument.Fields(ref).Result.Text)
           reftxt = ActiveDocument.Fields(ref).Result.Text
           Selection.InsertFile FileName:="V:\Tekstblokken\" & reftxt & ".doc"
    End If
Next
End Sub

Wat er gebeurd is als volgt, een CSV bestand wordt gemerged in Word (sjabloon brief) via Samenvoegvelden.
Vervolgens wordt de macro TB (tekstblok) gestart.
Deze gaat op zoek naar de tekst *@* in het word document en selecteerd deze tekst.
Vervolgens wordt er gezocht naar het samenvoeg veld met de kolomkop Cursustypecode.
Dit is het x-te veld ergens in het document, de x-te waarde wordt gebruikt om de (1e) waarde in deze kolom te gebruiken om een wordt document te importeren die de zelfde naam heeft als de cursuscode. De *@* wordt hierbij vervangen door de inhoud van dat word bestand.

Idee er achter is dat je de zelfde standaard brief kunt gebruiken en een 'tekstblok' variabel, qua plek in het docuemnt door de *@*, kan invoegen op basis van een waarde in een bepaalde kolom uit je csv bestand.
Uiteraard moet we wel voor elke cursustypecode een bloktekst (is gewoon een word bestand) zijn met de juiste naam en inhoud.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan