Prev: need help to complete my export to csv using macro.
Next: Word 2003 Calendar Controls on User Form and Word 2007
From: Vesna on 12 May 2010 17:16 Hello! I am working on a Word 2003 template with the following: - the page header includes the following fields: { IF {NUMPAGES \* MERGEFORMAT } = 1 “” { PAGE \* MERGEFORMAT } \* MERGEFORMAT } - the body has a FORMTEXT form field plus a table of FORMTEXT form fields - the footer has {FILENAME} and {SAVEDATE} - the body has no specific sections defined I worked on similar templates about 10 yrs. ago and got around the field and form field refresh/update problems by flipping to a print preview then back to force both the page and file info fields to refresh. That was a very tacky looking solution user-presentation-wise. This time, I created UpdateAllFields() to update all of the field and form fields. Essentially, if it was a successful save, I update the fields, then resave so everything is current. PROBLEM: This updates everything EXCEPT the page info fields. I want the true page numbers reflected when a person saves, saves as, and reopens the doc. The desired effect is no page number on page 1 if there is only one page, otherwise show a page number on every page, but the problem can be simplified even further. Even a plain page number on page 1 isn't accurately reflected when the doc goes from 2 pages down to 1 and is saved/saved as, then reopened. I've spent the last day pouring over knowledge base articles, Word 2003 Help, and this community boning up on the object model and looking for an easy-to-comprehend and tasteful solution. All I've become is more confused. What code can I add to UpdateAllFields() to refresh the page info fields so they are saved correctly in doc's built with this template? Am I stuck flipping to a print preview, then back, then resaving? I've included my FileSave(), FileSaveAs(), and UpdateAllFields() for your reference. ANY help or suggestions would be appreciated. Thank you in advance! Vesna Sub FileSave() ' FileSave Macro - Saves the active document or template On Error GoTo FileSave_error ActiveDocument.Save ' File, Save ' if user completed File, Save or ctrl+S action ' force refresh of all fields, including those in header & footer UpdateAllFields ' force resave so header and footer updates are also saved ActiveDocument.Save Exit Sub FileSave_error: ' if user DIDN'T complete File, Save or ctrl+S action ' or other error encountered Exit Sub End Sub Sub FileSaveAs() ' FileSaveAs Macro - Saves a copy of the document in a separate file Dim retval As Integer retval = Dialogs(wdDialogFileSaveAs).Show ' File, Save As... If retval = -1 Then ' if dialog box closed with OK ' force refresh of all fields, including those in header & footer UpdateAllFields ' force resave so updates are also saved ActiveDocument.Save End If End Sub Sub UpdateAllFields() ' update all fields Dim aStory As Range Dim aField As Field For Each aStory In ActiveDocument.StoryRanges For Each aField In aStory.Fields aField.Update Next aField Next aStory ' update page numbers ' CODE IS NEEDED HERE!!!! End Sub -- Vesna
From: Doug Robbins - Word MVP on 13 May 2010 05:49
Use the Different First Page option and put the page number in the Primary Header/Footer and leave it out of the First Page Header/Footer. -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP, originally posted via msnews.microsoft.com "Vesna" <ajdeigrajkolo(a)kvs1985.us> wrote in message news:19FD2C59-6DF3-446C-AF30-5628C0DD6CF5(a)microsoft.com... > Hello! > > I am working on a Word 2003 template with the following: > > - the page header includes the following fields: > { IF {NUMPAGES \* MERGEFORMAT } = 1 “” { PAGE \* MERGEFORMAT } \* > MERGEFORMAT } > - the body has a FORMTEXT form field plus a table of FORMTEXT form fields > - the footer has {FILENAME} and {SAVEDATE} > - the body has no specific sections defined > > I worked on similar templates about 10 yrs. ago and got around the field > and > form field refresh/update problems by flipping to a print preview then > back > to force both the page and file info fields to refresh. That was a very > tacky > looking solution user-presentation-wise. This time, I created > UpdateAllFields() to update all of the field and form fields. Essentially, > if > it was a successful save, I update the fields, then resave so everything > is > current. PROBLEM: This updates everything EXCEPT the page info fields. > > I want the true page numbers reflected when a person saves, saves as, and > reopens the doc. The desired effect is no page number on page 1 if there > is > only one page, otherwise show a page number on every page, but the problem > can be simplified even further. Even a plain page number on page 1 isn't > accurately reflected when the doc goes from 2 pages down to 1 and is > saved/saved as, then reopened. > > I've spent the last day pouring over knowledge base articles, Word 2003 > Help, and this community boning up on the object model and looking for an > easy-to-comprehend and tasteful solution. All I've become is more > confused. > > What code can I add to UpdateAllFields() to refresh the page info fields > so > they are saved correctly in doc's built with this template? Am I stuck > flipping to a print preview, then back, then resaving? > > I've included my FileSave(), FileSaveAs(), and UpdateAllFields() for your > reference. ANY help or suggestions would be appreciated. Thank you in > advance! > > Vesna > > Sub FileSave() > ' FileSave Macro - Saves the active document or template > On Error GoTo FileSave_error > ActiveDocument.Save ' File, Save > ' if user completed File, Save or ctrl+S action > ' force refresh of all fields, including those in header & footer > UpdateAllFields > ' force resave so header and footer updates are also saved > ActiveDocument.Save > Exit Sub > FileSave_error: > ' if user DIDN'T complete File, Save or ctrl+S action > ' or other error encountered > Exit Sub > End Sub > > Sub FileSaveAs() > ' FileSaveAs Macro - Saves a copy of the document in a separate file > Dim retval As Integer > retval = Dialogs(wdDialogFileSaveAs).Show ' File, Save As... > If retval = -1 Then ' if dialog box closed with OK > ' force refresh of all fields, including those in header & footer > UpdateAllFields > ' force resave so updates are also saved > ActiveDocument.Save > End If > End Sub > > Sub UpdateAllFields() > ' update all fields > Dim aStory As Range > Dim aField As Field > For Each aStory In ActiveDocument.StoryRanges > For Each aField In aStory.Fields > aField.Update > Next aField > Next aStory > > ' update page numbers > ' CODE IS NEEDED HERE!!!! > > End Sub > > -- > Vesna |