Header aanpassen in Word vanuit Excel VBA

Status
Niet open voor verdere reacties.

roppie555

Gebruiker
Lid geworden
18 dec 2007
Berichten
36
Vanuit VBA in Excel open ik een Word document dat ik als template gebruik m.b.v.:
Code:
        On Error GoTo w
        AppActivate "Microsoft Word"
        Set WordObj = Word.Application
        GoTo n
w:
        Set WordObj = CreateObject("Word.Application")
n:
        On Error GoTo 0
        Set WordDoc = WordObj.Documents.Open(TemplateDoc)
        WordObj.Visible = True
        Dim DocuObj As Object
        Set DocuObj = WordObj.ActiveDocument.Content
Dit gaat prima. Met de volgende code zoek en vervang ik aan aantal zelfgemaakte velden:
Code:
       DocuObj.Find.ClearFormatting
       DocuObj.Find.Execute FindText:="[[ref2]]", ReplaceWith:=ORef, Replace:=wdReplaceAll
Wat ik hier dus doe is zoeken naar: [[ref2]] en dit vervangen door de variabele string ORef.
Ook dit gaat goed.
Echter dit veld [[ref2]] staat ook in de header (koptekst) en daar moet hij ook aangepast worden. Die kan hij niet vinden. Ik vind in fora wel iets over StoryRanges. Maar hoe gebruik ik dit in mijn code vanuit Excel?
 
In plaats van:

Code:
[I][COLOR="Blue"] On Error GoTo w
        AppActivate "Microsoft Word"
        Set WordObj = Word.Application
        GoTo n
w:
        Set WordObj = CreateObject("Word.Application")
n:
        On Error GoTo 0
        Set WordDoc = WordObj.Documents.Open(TemplateDoc)
        WordObj.Visible = True
        Dim DocuObj As Object
        Set DocuObj = WordObj.ActiveDocument.Content[/COLOR][/I]

bereik je hetzelfde met

Code:
Sub transword()
  With Getobject(TemplateDoc)
    .Variables("koptekst")="Allerbovenste Koptekst"
    .Variables("koptekst4")=" "
    .fields.update
    .storyranges(wdHeaderFooterPrimary).fields.update
  end with
End Sub
en als je wil dat je macro een beetje tempo heeft gebruik je juist geen .visible=True.

Als je gebruik maakt van documentvariabelen hoef je nooit wat te verwijderen in het document/sjabloon. Het enige wat je hoeft te doen is een waarde aan die variabelen geven. Bijv. met
ActiveDocument.Variables("koptekst")="Allerbovenste Koptekst"
of leegmmaken
ActiveDocument.Variables("koptekst")=" "

met Activedocument.fields.update, zijn dan alle velden met documentvariabelen gevuld, alle overige velden (met documentvariabelen) leeg.

De Koptekstvelden aktualiseer je met
Code:
Activedocument.storyranges(wdHeaderFooterPrimary).fields.update
 
Laatst bewerkt:
Ik ga er mee aan de slag. Je hoort van me of het lukt.
Het eerste deel, de declaratie van het word-document vanuit Excel wil ik nu niet meer aanpassen het is een zeer groot programma en deze techniek word door het hele programma toegepast.
Kan ik ook met deze methode van declareren
Code:
  With Getobject(TemplateDoc)
    .Variables("koptekst")="Allerbovenste Koptekst"
    .Variables("koptekst4")=" "
    .fields.update
    .storyranges(wdPrimaryHeaderFooter).fields.update
  end with
toepassen vanuit Excel?
 
Het voordeel van deze methode is dat je niets hoeft te declaren.

voor wdHeaderFooterPrimary moet je nog wel even het nummer van het argument weten, anders kan dat niet naar Word doorgegeven worden.

Code:
With Getobject(TemplateDoc)
    .Variables("koptekst")="Allerbovenste Koptekst"
    .Variables("koptekst4")=" "
    .fields.update
    .storyranges(1).fields.update
  end with
 
Laatst bewerkt:
Zoals ik aangegeven heb kan ik de boel niet zo aanpassen dat ik zonder de declaratie kan zoals aangegeven in:
Code:
 On Error GoTo w
        AppActivate "Microsoft Word"
        Set WordObj = Word.Application
        GoTo n
w:
        Set WordObj = CreateObject("Word.Application")
n:
        On Error GoTo 0
        Set WordDoc = WordObj.Documents.Open(TemplateDoc)
        WordObj.Visible = True
        Dim DocuObj As Object
        Set DocuObj = WordObj.ActiveDocument.Content
Nu dacht ik jouw truc te gebruiken bijvoorbeeld:
Code:
DocuObj.variabels("Ref2") = "12345"
DocuObj.Fields.Update
Ik krijg dan de foutmelding: Kan de eigenschap of methode niet vinden.
Heb jij hier een oplossing voor? In ieder geval vast dank voor je tijd en moeite. Wordt erg gewaardeerd.
Rob
 
Zoals ik aangegeven heb kan ik de boel niet zo aanpassen dat ik zonder de declaratie kan zoals aangegeven in:
Dat is onzin

Haal de typefout uit de code: variables
 
Nou, nou, nou, onzin. Dat is een harde uitspraak.
Mijn applicatie bestaat uit 6.000 regels. Deze methode wordt door het hele programma heen gebruikt en daarom wil ik niet de hele boel aanpassen.

Ook zonder de typefout kan hij de eigenschap of de methode niet vinden.
 
Wat hij niet kan vinden is wat niet in de koptekst staat. In de koptekst staat geen veld met een docuemnt variabale {Docvariable ...} maar een veld met een referentie: {Ref ....}
Verander het referentieveld in een documentvariabele veld en je krijgt de melding niet meer.
Ik krijg de indruk dat je weliswaar met 6000 regels code werkt (wat mij overdreven veel lijkt), maar dat er ook lacunes in je basiskennis van VBA zitten (het gebruik van de methode getobject heeft bijv. niets met declareren te maken). Grijp eens een VBA-boek en spit dat systematisch door.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan