#1
|
||||
|
||||
Moving body text from old files to new files (based on template)
I've done a brief search, wasn't able to come up with a solution - if I missed something, please point me in the right direction.
TLDR: Looking for a way to copy body text from one template to a new template on 500+ files automatically. So I have about 500 files which are all based on a corporate letterhead template. The body of the text in these files is all I need to grab, not the headers or footers. I need to change the letterhead, essentially, on each individual file, so that the new files contain the old text. I have done about twenty by copy-paste, but this is boredom in its finest and I am hoping there is, perhaps, a better way? I need to maintain generalized formating and indentation, but match the new font style and size. There are no color issues. This is being done on a W7KP machine running Office 2013. Cheers and thanks!! Jason |
#2
|
|||
|
|||
What you want to do may be able to be done. It will depend on the ability of a macro to determine what it is that gets copied. Headers and footers are stored in section marks. There is one at the end of every document, but may be more in the middle. Sections / Headers and Footers in Microsoft Word (Ribbon Versions) If everything is one section, it should be relatively easy. That is not my forte' though.
However, I would suggest a paradigm shift for your new templates: use modular components stored in one or two locations. Build your templates using those components in a way that lets them be updated automatically by changes in the base. I would suggest AutoText entries holding your letterhead, etc. Store those in a Global Template. Then use an AutoText field to put the components into the templates. Finally, put an AutoNew macro in the templates to either lock or unlink the AutoText fields. Next time, you will need to only change the AutoText entries. All of the templates will update automatically when they are used to create new documents. Automated Boilerplate Using Microsoft Word I use something a bit more complex, in that I have a single document that contains parts marked by bookmarks. An AutoNew macro in each template calls them into the new document at a bookmarked location in the template. AutoText is easier but I had this set up before I realized that. For documents based on my letterhead template, an Autonew macro tests the new document's template's name against a document variable that contains the name of the template that has the up-to-date material. If the document is based on any template other than that base one, the material is copied from the base one into the new document, replacing existing headers, footers, and styles. Because of the styles, I think that is a bit better than AutoText, but not a great deal better. |
#3
|
||||
|
||||
Quote:
Most will only receive the PDF version of the finished product; not the original Word. That said, is it safe to assume that, in the creation of the PDF from the master document, all relevant sections are saved in and not linked to the final document? Does that even make sense? (I am fairly comfortable in Word, and office in general; but by no means an expert) I am going now to check out the reference made. Thanks!! Jason |
#4
|
||||
|
||||
In reality, all you should need to do is attach the new template to the existing files (or copies of them), then apply the new Style definitions to the documents you've attached the template to. For example, the following macro does that for all documents in a selected folder:
Code:
Sub UpdateDocumentTemplates() Application.ScreenUpdating = False Dim strFolder As String, strFile As String, strDocNm As String, wdDoc As Document strDocNm = ActiveDocument.FullName strFolder = GetFolder If strFolder = "" Then Exit Sub strFile = Dir(strFolder & "\*.doc", vbNormal) While strFile <> "" If strFolder & "\" & strFile <> strDocNm Then Set wdDoc = Documents.Open(FileName:=strFolder & "\" & strFile, AddToRecentFiles:=False, Visible:=False) With wdDoc .AttachedTemplate = "C:\Templates\SomeTemplate.dotm" .CopyStylesFromTemplate (.AttachedTemplate.FullName) .Close SaveChanges:=True End With End If strFile = Dir() Wend Set wdDoc = Nothing Application.ScreenUpdating = True End Sub Function GetFolder() As String Dim oFolder As Object GetFolder = "" Set oFolder = CreateObject("Shell.Application").BrowseForFolder(0, "Choose a folder", 0) If (Not oFolder Is Nothing) Then GetFolder = oFolder.Items.Item.Path Set oFolder = Nothing End Function
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#5
|
|||
|
|||
Paul,
They are changing headers and footers. Attaching a new template will do nothing. They need to copy the body of the template into a new template with the new headers/footers. Any chance you could come up with code that will: For each template in a folder...
|
#6
|
|||
|
|||
Quote:
Quote:
Quote:
If you use a macro to copy components from a source template, those components become part of the new document. |
#7
|
|||
|
|||
One more note, if a macro is used to create the new templates, you will want to go over each one carefully. The chance that one or more will contain multiple sections (and thus different headers/footers) is high.
|
#8
|
||||
|
||||
Quote:
As for the headers/footers, if the content differs, the processing of that can be added to the code: Code:
Sub UpdateDocumentsAndTemplates() Application.ScreenUpdating = False Dim strFolder As String, strFile As String, strDocNm As String, wdDoc As Document Dim strTmplt As String, wdTmp As Document, HdFt As HeaderFooter strDocNm = ActiveDocument.FullName strFolder = GetFolder If strFolder = "" Then Exit Sub strTmplt = "C:\Templates\SomeTemplate.dotm" Set wdTmp = Documents.Open(strTmplt) strFile = Dir(strFolder & "\*.doc", vbNormal) While strFile <> "" If strFolder & "\" & strFile <> strDocNm Then Set wdDoc = Documents.Open(FileName:=strFolder & "\" & strFile, AddToRecentFiles:=False, Visible:=False) With wdDoc .AttachedTemplate = strTmplt .CopyStylesFromTemplate (strTmplt) With .Sections(1) For Each HdFt In .Headers If HdFt.Exists Then If wdTmp.Sections(1).Headers(HdFt.Index).Exists Then HdFt.Range.FormattedText = wdTmp.Sections(1).Headers(HdFt.Index).Range.FormattedText End If End If Next For Each HdFt In .Footers If HdFt.Exists Then If wdTmp.Sections(1).Footers(HdFt.Index).Exists Then HdFt.Range.FormattedText = wdTmp.Sections(1).Footers(HdFt.Index).Range.FormattedText End If End If Next End With .Close SaveChanges:=True End With End If strFile = Dir() Wend Set wdDoc = Nothing Application.ScreenUpdating = True End Sub Function GetFolder() As String Dim oFolder As Object GetFolder = "" Set oFolder = CreateObject("Shell.Application").BrowseForFolder(0, "Choose a folder", 0) If (Not oFolder Is Nothing) Then GetFolder = oFolder.Items.Item.Path Set oFolder = Nothing End Function
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
Thread Tools | |
Display Modes | |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Need to find/replace text in many word files - but text is in embedded word files | semple.13 | Word VBA | 5 | 11-03-2015 01:20 PM |
Moving Multiple Hyperlinked Files around | cole790 | Word | 1 | 12-08-2013 03:55 PM |
Merging pst files and moving to NAS drive | riteoh | Outlook | 0 | 10-02-2012 05:20 AM |
Moving files from one template to another | Stephen0352 | Word | 4 | 03-05-2012 01:29 AM |
moving data files | g48dd | Outlook | 2 | 06-17-2011 01:18 PM |