ایجاد سوال
dark_mode
0 دوستدار 0 امتیاز منفی
18 visibility
موضوع: آفیس توسط:

تیم یک ماکرو ساده برای به روز رسانی تمام فیلدهای یک الگو ایجاد کرد. ماکرو شامل مرحله ای است که کل سند را انتخاب می کند، مانند فشار دادن Ctrl+A. این مرحله سرصفحه‌ها و پاورقی‌ها را انتخاب نمی‌کند و تیم می‌ترسد که ممکن است فیلدهایی برای به‌روزرسانی در آن مکان‌ها وجود داشته باشد. او فکر می‌کند که آیا راهی برای اضافه کردن سرصفحه‌ها و پاورقی‌ها در هنگام انتخاب همه وجود دارد یا اینکه آیا روش دیگری برای آن وجود دارد. ماکرو خود را برای به روز رسانی فیلدها در قسمت سرصفحه یا پاورقی.

پاسخ ساده این است که شما باید کد ماکرو خود را به گونه‌ای تغییر دهید که در تمام قسمت‌های مختلف Word به نظر برسد که ممکن است فیلدهایی وجود داشته باشد. مشکل استفاده از روش "انتخاب همه" این است که فقط متن را در سند اصلی انتخاب می کند. سرصفحه ها، پاورقی ها و تعداد زیادی از عناصر دیگر در لایه های جداگانه خود نگهداری می شوند که مانع از انتخاب آنها با تمام متن سند می شود.

اگر به سادگی می خواهید فیلدها را در متن اصلی و در سرصفحه ها و پاورقی ها به روز کنید، باید از تکنیکی مانند زیر استفاده کنید:

Sub MyUpdateFields1()
    ActiveDocument.StoryRanges(wdMainTextStory).Fields.Update
    ActiveDocument.StoryRanges(wdPrimaryFooterStory).Fields.Update
    ActiveDocument.StoryRanges(wdPrimaryHeaderStory).Fields.Update
End Sub

توجه داشته باشید که لایه های مختلف یک سند به عنوان "داستان" نامیده می شوند و در مجموعه خود نگهداری می شوند. در حالی که این ماکرو ساده به سرعت فیلدهای داستان های حاوی متن اصلی، پاورقی ها و سرصفحه ها را به روز می کند، داستان های دیگری (لایه ها) وجود دارد که ممکن است فیلدهایی وجود داشته باشد که نیاز به به روز رسانی دارند. ماکرو زیر هر داستان را صرف نظر از نوع آن بررسی می کند و به روز رسانی لازم را انجام می دهد:

Sub MyUpdateFields2()
    Dim story As Word.Range

    For Each story In ActiveDocument.StoryRanges
        Do
            story.Fields.Update
            " Check linked stories as linked stories are not independent
            Set story = story.NextStoryRange
        Loop Until (story Is Nothing)
    Next
End Sub

با این حال، اگر واقعاً می‌خواهید کامل باشید، چیزی بیش از لایه‌های داستانی مختلف وجود دارد که باید از طریق آنها نگاه کنید. به عنوان مثال، ممکن است برخی از فیلدها در جعبه های متنی وجود داشته باشد که نیاز به به روز رسانی دارند. یک کلان جامع‌تر برای مقابله با همه این مکان‌های دیگر که می‌توان فیلدها را پیدا کرد، مورد نیاز است. در مثال زیر، به عناصر مختلف سند که می‌توان آنها را برای فیلدها بررسی کرد، توجه کنید.

Sub MyUpdateFields3()
    Dim doc As Document " Pointer to Active Document
    Dim wnd As Window " Pointer to Document"s Window
    Dim lngMain As Long " Main Pane Type Holder
    Dim lngSplit As Long " Split Type Holder
    Dim lngActPane As Long " ActivePane Number
    Dim rngStory As Range " Range Objwct for Looping through Stories
    Dim TOC As TableOfContents " Table of Contents Object
    Dim TOA As TableOfAuthorities "Table of Authorities Object
    Dim TOF As TableOfFigures "Table of Figures Object
    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

    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
اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

looks_5نام شما برای نمایش - اختیاری
حریم شخصی : آدرس ایمیل شما محفوظ میماند و برای استفاده های تجاری و تبلیغاتی به کار نمی رود
عدد چهار رقمی در تصویر را وارد کنید

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
اگر حساب گوگل دارید به راحتی وارید شوید

0 پاسخ وجود دارد

سوالات مشابه

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما
0 دوستدار 0 امتیاز منفی
0 پاسخ 22 visibility
ارسال شده در 25 تیر 1402 موضوع: آفیس توسط: Admin
0 دوستدار 0 امتیاز منفی
0 پاسخ 25 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 44 visibility
ارسال شده در 27 تیر 1402 موضوع: آفیس توسط: Admin
0 دوستدار 0 امتیاز منفی
0 پاسخ 25 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 29 visibility

24.3k سوال

9.6k پاسخ

614 دیدگاه

11.2k کاربر

244 نفر آنلاین
0 عضو و 244 مهمان در سایت حاضرند
بازدید امروز: 21885
بازدید دیروز: 17853
بازدید کل: 20334067
...