2016-03-30 1 views
0

der folgende Code ist Teil eines viel größeren Stück Arbeit (wo es funktioniert genau so, wie ich wollte, außer diesem Teil). Ich habe ein Feld in der Fußzeile mit dem Dokumentnamen und dies nimmt die DOC/DOCX vom Ende. Das Problem ist, dass es scheint, dass dieser Code auch alle Links innerhalb des Hauptteils des Dokuments mit dem Namen des Dokuments aktualisiert, z. Wenn ein Link im Dokument www.google.co.uk lautet, ändert dieses Makro den Link im Dokument zum Namen des Dokuments. Ich möchte, dass dies nur in der Fußzeile geschieht.Word VBA ausführen Aktion nur in der Fußzeile und nirgendwo sonst

Können Sie bitte beraten, wie Sie diesen Code dazu bekommen? Ich habe ein paar verschiedene Dinge ausprobiert, aber keiner von ihnen funktioniert.

+0

müssen Sie die Fußzeile öffnen und dann Ihre Schritte ausführen. ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter – Sorceri

Antwort

1

Das Problem mit Ihrem Code ist, dass es alle Teile des Dokuments anspricht - die Sie nicht möchten. Sie möchten nur die Fußzeile (n). Ein Word-Dokument kann viele Fußzeilen haben, abhängig davon, wie viele Abschnitte das Dokument enthält und ob die Fußzeilen in den Abschnitten von früheren Abschnitten getrennt wurden. Also, wenn Sie alle Fußzeilen überprüfen wollte, dann würden Sie alle Schleife müssen die Abschnitte, so etwas wie

Dim sec as Word.Section 
Dim rngFooter as Word.Range 
For each sec in ActiveDocument.Sections 
    Set rngFooter = sec.Footers(wdHeaderFooterPrimary).Range 
    For each field in rngFooter.Fields 
    aField.Result.Text = oldFilename 
    Next field 
Next sec 

Aber bedenken Sie wird diese alle Felder in den Fußzeilen adressieren, so wäre es am Ende zu beeinträchtigen Alle Seitennummern oder Daten, die Sie haben könnten ...

Es gibt ein anderes Problem mit der Vorgehensweise, die Sie verwenden: Feldcodes werden aktualisiert, und wenn sie dies tun, haben Sie sie wie in Ihrem Code geschrieben , wird verloren sein. Sie können also eine sehr unangenehme Überraschung erleben, wenn Sie dieses Dokument drucken oder wenn eine andere Aktion eine Aktualisierung des Feldcodes auslöst.

Da Sie nicht auf den Feldcode angewiesen sind, um den Dokumentnamen automatisch zu generieren, verwenden Sie keinen Feldcode (was auch immer es sein mag). Löschen Sie den Feldcode und verwenden Sie stattdessen ein Lesezeichen. Dann können Sie den Namen des Dokuments zu dem Lesezeichen, so etwas wie dies zu:

Dim rngBkm as Word.Range 
Dim sBkmName as String 
sBkmName = "DocName" 
If ActiveDocument.Bookmarks.Exists(sBkmName) Then 
    Set rngBkm = ActiveDocument.Bookmarks(sBkmName) 
    rngBkm.Text = oldFileName 
    'Assigning the text deletes the bookmark, so add it back 
    ActiveDocument.Bookmarks.Add sBkmName, rngBkm 
End If 

Hinweis: Ich weiß nicht empfehlen verwenden Sie den Vorschlag in Kommentare der Fußzeile zu öffnen - keine Notwendigkeit, tatsächlich sie öffnen und besser, nicht zu.

+0

Hallo, wie würde ich die Fußzeile erhalten, um den DocName in die Fußzeile auf Seite 2 und 3 usw. aufzunehmen. Ich kann nur ein Lesezeichen mit dem Namen DocName pro Dokument haben (korrigiert mich, wenn ich falsch liege) ! – Tom36

+0

Nun, wenn dies Word-Fußzeile ist (und nicht nur eine Position am Ende der Seite), dann wird alles, was Sie dort einfügen, im gesamten Dokument, auf jeder Seite wiederholt. Das ist der Vorteil von Kopf- und Fußzeilen :-) Schwierig wird es nur, wenn Sie nicht auf jeder Seite Inhalte wollen ... Wenn Sie das nicht auf der * ersten * Seite haben wollen, müssen Sie das "Different First Seite "Option im Dokument. (Hinweis: Dieser Code schreibt * nicht * auf eine "andere erste Seite".) –

Verwandte Themen