![]() |
|
#1
|
|||
|
|||
|
Hi I have some VBA that opens all Word documents in a given folder, pastes their content into a blank template then saves with the original filename in a new folder. As part of this I want the filename field in the header of the new documents to automatically update with the document filename. I nknwo you can use F9 but I don't want this to be a task for the document users. I've seen some vba examples such as: Code:
Dim aStory As Range
Dim aField As Field
' Automatically update all fields in document when it is opened
For Each aStory In ActiveDocument.StoryRanges
For Each aField In aStory.Fields
aField.Update
Next aField
Next aStory
I'd really appreciate any pointers on how to solve this, thanks. Last edited by macropod; 10-18-2012 at 02:33 PM. Reason: Added code tags & formatting |
|
#2
|
||||
|
||||
|
Without knowing what code you're trying to integrate this into, it's rather hard to advise ...
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#3
|
|||
|
|||
|
Apologies, here is the code in question:
Code:
' Sub for recursing through multiple files in directories, to perform a common task
Sub MassEdit_Loop()
Dim MyPath As String, FilesInPath As String, RegEx As String, Template As String, NewFile As String
Dim MyFiles() As String
Dim FNum As Long
Dim MainDoc As Word.Document, MainDoc2 As Word.Document
Dim wdApp As Word.Application
Dim wdApp2 As Word.Application
MyPath = "C:\Documents and Settings\beirol\Desktop\Existing"
Template = "C:\Documents and Settings\beirol\Desktop\Template\Procedure Template.doc"
' This is the Regex for file searching (e.g. all .doc files in the folder)
RegEx = "*.doc"
' Call upon the Recursive File Name builder
Dim colFiles As New Collection
RecursiveDir colFiles, MyPath, RegEx, True
' Loop through the Filenames to collect them into an Array
FNum = 0
Dim vFile As Variant
For Each vFile In colFiles
FNum = FNum + 1
ReDim Preserve MyFiles(1 To FNum)
MyFiles(FNum) = vFile
Next vFile
If FNum > 0 Then
For FNum = LBound(MyFiles) To UBound(MyFiles)
On Error Resume Next
' Open template
Set wdApp = CreateObject("word.Application")
wdApp.Visible = False
wdApp.ScreenUpdating = False
Set MainDoc = wdApp.Documents.Open(Template)
' Open source document
Set wdApp2 = CreateObject("word.Application")
wdApp2.Visible = False
wdApp2.ScreenUpdating = False
Set MainDoc2 = wdApp2.Documents.Open(MyFiles(FNum))
' Select all data from source doc
' Copy data
wdApp2.Selection.WholeStory
wdApp2.Selection.Copy
wdApp.Selection.Paste
'Format the content to Guidelines
wdApp.Selection.WholeStory
wdApp.Selection.Font.Name = "Verdana"
wdApp.Selection.Font.Size = 10
wdApp.Selection.ParagraphFormat.LineSpacingRule = wdLineSpaceExactly
wdApp.Selection.ParagraphFormat.LineSpacing = 12
'set word back to normal
wdApp2.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
wdApp2.Application.Quit wdDoNotSaveChanges
wdApp2.Visible = True
wdApp2.ScreenUpdating = True
Set wdApp2 = Nothing
justFileName = Dir(MyFiles(FNum))
NewFile = "C:\Documents and Settings\beirol\Desktop\Converted\" + justFileName
wdApp.ActiveDocument.SaveAs Filename:=NewFile
wdApp.ActiveDocument.Close
wdApp.Application.Quit wdDoNotSaveChanges
wdApp.Visible = True
wdApp.ScreenUpdating = True
Set wdApp = Nothing
Next FNum
End If
End Sub
Last edited by macropod; 10-18-2012 at 02:35 PM. Reason: Added code tags & formatting |
|
#4
|
||||
|
||||
|
Try the following, which I've streamlined quite a bit:
Code:
' Sub for recursing through multiple files in directories, to perform a common task
Sub MassEdit_Loop()
Dim MyPath As String, FilesInPath As String, RegEx As String, Template As String, NewFile As String
Dim MyFiles() As String
Dim FNum As Long
Dim MainDoc As Word.Document, MainDoc2 As Word.Document
Dim wdApp As Word.Application
Dim RngStry As Word.Range, Fld As Word.Field
MyPath = "C:\Documents and Settings\beirol\Desktop\Existing"
Template = "C:\Documents and Settings\beirol\Desktop\Template\Procedure Template.doc"
' This is the Regex for file searching (e.g. all .doc files in the folder)
RegEx = "*.doc"
' Call upon the Recursive File Name builder
Dim colFiles As New Collection
RecursiveDir colFiles, MyPath, RegEx, True
' Loop through the Filenames to collect them into an Array
FNum = 0
Dim vFile As Variant
For Each vFile In colFiles
FNum = FNum + 1
ReDim Preserve MyFiles(1 To FNum)
MyFiles(FNum) = vFile
Next vFile
If FNum > 0 Then
' Start Word
Set wdApp = CreateObject("word.Application")
With wdApp
.Visible = False
.ScreenUpdating = False
For FNum = LBound(MyFiles) To UBound(MyFiles)
On Error Resume Next
justFileName = Dir(MyFiles(FNum))
NewFile = "C:\Documents and Settings\beirol\Desktop\Converted\" + justFileName
Set MainDoc = .Documents.Open(FileName:=Template, AddToRecentFiles:=False)
' Open source document
Set MainDoc2 = .Documents.Open(FileName:=MyFiles(FNum), AddToRecentFiles:=False)
' Select all data from source doc
' Copy data
MainDoc2.WholeStory.Copy
MainDoc2.Close SaveChanges:=wdDoNotSaveChanges
With MainDoc
With .Range
.Paste
'Format the content to Guidelines
.Font.Name = "Verdana"
.Font.Size = 10
.ParagraphFormat.LineSpacingRule = wdLineSpaceExactly
.ParagraphFormat.LineSpacing = 12
End With
' update all fields in document
For Each RngStry In .StoryRanges
For Each Fld In RngStry.Fields
Fld.Update
Next
Next
.SaveAs FileName:=NewFile, AddToRecentFiles:=False
.Close
End With
Next FNum
.Quit
End With
Set wdApp = Nothing
End If
End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#5
|
|||
|
|||
|
I'll remember that going forward and thanks very much for your help with this, worked a treat
|
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| auto update slide on viewing | videoman | PowerPoint | 0 | 07-11-2012 06:29 AM |
| Table of Contents - Direct Field Implementation - Auto-Update Numbering | ztag | Word | 3 | 01-19-2012 03:04 PM |
Use a mail merge Field as the final doc filename
|
DaveBF | Mail Merge | 1 | 10-22-2011 10:16 PM |
| Auto Update the date. | Nirik | Excel | 16 | 12-16-2010 04:23 AM |
| Project Auto-Update | hB-sys | Project | 0 | 04-15-2010 06:46 AM |