Tekst zoeken en vervangen VBA Excel -> Word

Status
Niet open voor verdere reacties.

hichelay

Gebruiker
Lid geworden
6 apr 2018
Berichten
10
Dag allen,

Ik wil graag dat mijn Excel VBA code een tekst zoekt in de voettekst en vervangt met een eigen tekst. De code die ik al heb, zoekt en vervangt al een aantal zaken, dit is (een klein deel van) de code die ik nu heb:

Code:
Sub genereerworddocument()

Dim wdApp As Object, wdDoc As Object
Set wdApp = CreateObject("word.application")
wdApp.Visible = True
Set wdDoc = wdApp.Documents.Add(Template:="C:\tijdelijk\document.docx", NewTemplate:=False, DocumentType:=0)

With wdDoc.Content.Find
  .Text = "<vervangdezetekst>"
  .Replacement.Text = Range("vervangendetekst").Value
  .Wrap = wdFindContinue
  .Execute Replace:=wdReplaceAll
End With

With wdApp.Activate
End With

Set wdApp = Nothing: Set wdDoc = Nothing: Set wdsave = Nothing
End Sub

Zoals je ziet, heb ik een standaard Word document als sjabloon, waarin teksten worden gezocht en vervangen. Dit zoekt echter alleen in de body, maar niet header/footer.

Waar ik nu naar op zoek ben is iets als dit:

Code:
With wdDoc.Content.Find IN VOETTEKST
  .Text = "<voettekst>"
  .Replacement.Text = Range("vervangendevoettekst").Value
  .Wrap = wdFindContinue
  .Execute Replace:=wdReplaceAll
End With

Kortom: dezelfde code, maar dan die gaat zoeken en vervangen in de voettekst. Uiteraard heb ik het internet al afgezocht, maar het is mij nog niet gelukt.

Alvast bedankt!
 
Ik heb zo te zien een oplossing gevonden via https://bytes.com/topic/access/answers/949348-replace-text-word-header-microsoft-access-vba

Ik heb toegevoegd:

Code:
Dim myStoryRange As Word.Range

For Each myStoryRange In wdDoc.StoryRanges
    With myStoryRange.Find
        .Text = "<voettekst>"
        .Replacement.Text = "vervangendevoettekst"
        .Wrap = wdFindContinue
        .Execute Replace:=wdReplaceAll
    End With
Next myStoryRange

Als iemand hier nog toevoegingen of aanmerkingen op heeft, hoor ik het alsnog graag.
 
Als iemand hier nog toevoegingen of aanmerkingen op heeft, hoor ik het alsnog graag.
Je bent niet de eerste die met vba teksten in kop- of voettekst probeert te veranderen. En toch heb ik het, terwijl ik behoorlijk veel doe in Word, zelden problemen met kopteksten. En dat komt doordat ik in kop- en voetteksten bijna alleen velden gebruik die de info uit (met stijlen of verwijzingen) opgemaakte velden haalt. En dan heb je dus nooit problemen. Het lijkt mij zo op het eerste gezicht sterk dat zo’n oplossing niet ook bij jou zou kunnen werken. De tip: probeer zoveel mogelijk te automatiseren in je sjabloon, daar zijn die immers voor.
 
Je bent niet de eerste die met vba teksten in kop- of voettekst probeert te veranderen. En toch heb ik het, terwijl ik behoorlijk veel doe in Word, zelden problemen met kopteksten. En dat komt doordat ik in kop- en voetteksten bijna alleen velden gebruik die de info uit (met stijlen of verwijzingen) opgemaakte velden haalt. En dan heb je dus nooit problemen. Het lijkt mij zo op het eerste gezicht sterk dat zo’n oplossing niet ook bij jou zou kunnen werken. De tip: probeer zoveel mogelijk te automatiseren in je sjabloon, daar zijn die immers voor.

Dag OctaFish,

Bedankt voor je nuttige toevoeging! Hoe kan ik dan in VBA vanuit Excel een veld in Word vinden en de tekst vervangen?
 
Dat hoeft niet :). In kopteksten maak ik dus vaak gebruik van velden die verwijzen naar stijlen. Wil ik in de voettekst de laatste paragraafkop terugzien, dan maak ik dus een veld { STYLEREF "Kop 2" \l }. In de tekst van het document hoef ik dan alleen de paragrafen op te maken met Kop 2 en ik ben klaar. Kortom: je werkt met verwijzingen naar je document. Nogmaals: ik hoef dus eigenlijk nooit iets te klooien met kop- en voetteksten; alles zit bij mij gewoon in het document.
 
Als je gebruik maakt van een documentvariabele:

Code:
Sub M_snb()
    With CreateObject("Word.document")
       .Content = String(20, vbCr)
       .Fields.Add .Paragraphs(11).Range, 64, "  snb ", 0
       .variables("snb") = "illustratie"
       .Fields.Update
    End With
End Sub

Als je liever de documentvariabelen er met de hand inzet volstaat:

Code:
Sub M_snb()
    With GetObject("G:\OF\voorbeeld.docx")
       .variables("snb") = "illustratie"
       .Fields.Update
    End With
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan