جی موقعیتی دارد که در آن یک فیلد ویژگی سند در یک جعبه متن در یک سند درج شده است. استفاده از Ctrl+A و سپس فشردن F9 باید تمام فیلدهای سند ویژگی را در سند به روز کند، اما این یک فیلد با عمل جی به روز نمی شود. فرآیند به روز رسانی فیلدها در سرصفحه ها و پاورقی ها همچنین فیلد داخل متن را به روز نمی کند. جی میپرسد آیا راهی برای بهروزرسانی دستی فیلد با استفاده از صفحهکلید وجود دارد یا راهی برای بهروزرسانی آن با استفاده از یک ماکرو وجود دارد.
فیلدها را می توان در بسیاری از عناصر سند قرار داد. به عنوان مثال، آنها می توانند در متن سند اصلی، در جعبه های متن، در سرصفحه ها یا پاورقی ها، در AutoShapes یا در جداول خاص باشند. در حالی که فشار دادن Ctrl+A تمام سند شما را انتخاب می کند، با فشار دادن F9 فیلدها در تمام عناصر سند به روز نمی شوند. در عوض، برای انجام به روز رسانی باید از یک ماکرو استفاده کنید.
اگر به سادگی می خواهید یک ماکرو فیلدها را در هر یک از کادرهای متنی خود به روز کند، انجام این کار به اندازه کافی آسان است. ماکرو زیر از طریق هر یک از اشکال موجود در سند شما (شامل کادرهای متن و AutoShapes) مراحل میدهد و اگر شکل حاوی متن است، فیلدهای موجود در آن را بهروزرسانی کنید.
Sub UpdateTBFields()
Dim shp As Shape
For Each shp In ActiveDocument.Shapes
With shp.TextFrame
If .HasText Then
.TextRange.Fields.Update
End If
End With
Next
End Sub
این ماکرو می تواند به یک میانبر صفحه کلید اختصاص داده شود تا بتوانید با لمس میانبر به راحتی فیلدها را به روز کنید. البته، ممکن است بخواهید یک ماکرو فراگیرتر ایجاد کنید که همه فیلدها را در هر کجا که هستند به روز می کند. (به یاد داشته باشید - فیلدها می توانند در هر تعداد از عناصر سند باشند.) در این صورت، نسخه فراگیرتر زیر را از ماکرو در نظر بگیرید.
Public Sub UpdateAllFields()
Dim doc As Document
Dim wnd As Window
Dim lngMain As Long
Dim lngSplit As Long
Dim lngActPane As Long
Dim rngStory As Range
Dim TOC As TableOfContents
Dim TOA As TableOfAuthorities
Dim TOF As TableOfFigures
Dim shp As Shape
" Set Objects
Set doc = ActiveDocument
Set wnd = ActiveDocument.ActiveWindow
" get Active Pane Number
lngActPane = wnd.ActivePane.Index
" Hold View Type of Main pane
lngMain = wnd.Panes(1).View.Type
" Hold SplitSpecial
lngSplit = wnd.View.SplitSpecial
" Get Rid of any split
wnd.View.SplitSpecial = wdPaneNone
" Set View to Normal
wnd.View.Type = wdNormalView
" Loop through each story in doc to update
For Each rngStory In doc.StoryRanges
If rngStory.StoryType = wdCommentsStory Then
Application.DisplayAlerts = wdAlertsNone
" Update fields
rngStory.Fields.Update
Application.DisplayAlerts = wdAlertsAll
Else
" Update fields
rngStory.Fields.Update
End If
Next
"Loop through text boxes and update
For Each shp In doc.Shapes
With shp.TextFrame
If .HasText Then
shp.TextFrame.TextRange.Fields.Update
End If
End With
Next
" Loop through TOC and update
For Each TOC In doc.TablesOfContents
TOC.Update
Next
" Loop through TOA and update
For Each TOA In doc.TablesOfAuthorities
TOA.Update
Next
" Loop through TOF and update
For Each TOF In doc.TablesOfFigures
TOF.Update
Next
" Return Split to original state
wnd.View.SplitSpecial = lngSplit
" Return main pane to original state
wnd.Panes(1).View.Type = lngMain
" Active proper pane
wnd.Panes(lngActPane).Activate
" Close and release all pointers
Set wnd = Nothing
Set doc = Nothing
End Sub