برنارد می تواند یک فیلد NumWords به سند خود اضافه کند که تعداد کلمات کل سند را برمی گرداند. او فکر می کند که آیا راهی برای گنجاندن تعداد کلمات مثلاً در یک بخش یا بخشی از سند وجود دارد؟ در نوار وضعیت، او می تواند تعداد کلمات موجود در هر متنی را که در سند انتخاب می کند، ببیند. این همان تعداد کلماتی است که او می خواهد به سند اضافه کند.
هیچ فیلدی وجود ندارد که به شما اجازه دهد این اطلاعات را به صورت پویا درج کنید. با این حال، میتوانید از یک ماکرو، همراه با متغیرهای سند، برای گنجاندن اطلاعات مورد نظر استفاده کنید - حداقل در مورد تعداد کلمات برای بخشها.
ماکرو ساده زیر را در نظر بگیرید:
Sub SetValues() Dim J As Integer Dim v As Variable Dim sVName As String With ActiveDocument For J = 1 To .Sections.Count sVName = "Sec" & Format(J, "0#") For Each v In .Variables If v.Name = sVName Then v.Delete Next v .Variables.Add Name:=sVName, _ Value:=.Sections(J).Range.ComputeStatistics(wdStatisticWords) Next J End With End Sub
این ماکرو از هر بخش در سند عبور می کند و نامی برای متغیر سند قرار می دهد که برای آن بخش اعمال می شود. این نام در متغیر sVName ذخیره می شود و فرمت هایی مانند Sec01، Sec02، Sec03 و ... خواهد داشت. سپس کد به طور کامل از هر متغیر سند عبور می کند و اگر نام (Sec01، Sec02 و غیره) قبلاً استفاده شده باشد، متغیر سند حذف می شود. در نهایت، یک متغیر سند جدید با استفاده از نام تعریف شده اضافه می شود که حاوی تعداد کلمات برای بخش است.
چرا تعداد کلمات را در متغیرهای سند قرار می دهیم؟ زیرا می توانید از یک فیلد در سند خود برای ارجاع به مقدار (تعداد کلمات) ذخیره شده در متغیر سند استفاده کنید. اگر میخواهید تعداد کلمات بخش 2 را وارد کنید، فرمت فیلد در اینجا آمده است:
{ DOCVARIABLE "Sec02" }
اگر هیچ متغیر سندی به نام "Sec02" تعریف نشده باشد - به عنوان مثال، ماکرو را اجرا نکرده اید یا سند بخش دوم ندارد - آنگاه فیلد "خطا! متغیر سند ارائه نشده است" را برمی گرداند. در غیر این صورت، تعداد کلمات ذخیره شده در متغیر سند را برمی گرداند.
هر بار که متن را در بخشهای مختلف سند خود بهروزرسانی میکنید، میخواهید برای بهروزرسانی تعداد کلمات، ماکرو را دوباره اجرا کنید. سپس، فیلدها را به روز کنید و تعداد کلمات شما به روز می شود. همچنین به یاد داشته باشید که اگر بخش جدیدی را در وسط سند خود اضافه کنید، شماره بخش شما تغییر خواهد کرد. بنابراین، اگر قبلاً از یک فیلد DOCVARIABLE برای دریافت تعداد کلمات برای Sec04 استفاده کردهاید، اما افزودن یک بخش جدید آن بخش را به Sec05 میآورد، باید فیلد DOCVARIABLE را بهصورت دستی بهروزرسانی کنید تا به شمارهگذاری بخش جدید اشاره کنید.
اگر از بخشها در سند خود استفاده نکردهاید، و در عوض میخواهید به بخشهایی از سند ارجاع دهید، میتوانید مفهوم بالا را طوری گسترش دهید که به متن نشانکشده اشاره کند. لزوماً کمی پیچیده تر خواهد بود، اما به همین راحتی کار خواهد کرد. تنها کاری که باید انجام دهید این است که بفهمید از چه نامگذاری می خواهید برای انتخاب های نشانک شده استفاده کنید. برای مثال، فرض کنید میخواستید از نشانکهایی استفاده کنید که از قالبهایی مانند BkMk01، BkMk02 و غیره استفاده میکردند (شباهت با شمارههای بخش که قبلاً توضیح داده شد را ببینید؟) اکنون میتوانید یک ماکرو مانند این را اجرا کنید:
Sub SetValues() Dim J As Integer Dim v As Variable Dim sVName As String With ActiveDocument For J = 1 To .Bookmarks.Count sVName = .Bookmarks(J).Name If Len(sVName) = 6 And Left(sVName, 4) = "BkMk" Then For Each v In .Variables If v.Name = sVName Then v.Delete Next v .Variables.Add Name:=sVName, _ Value:=.Bookmarks(J).Range.ComputeStatistics(wdStatisticWords) End If Next J End With End Sub
این نسخه از ماکرو تا حد زیادی مشابه نسخه قبلی است، به جز نحوه تعیین sVName. در این مورد، نام هر نشانک بررسی می شود و اگر نام دقیقاً 6 کاراکتر باشد و با "BkMk" شروع شود، انتخاب متنی است که باید به آن توجه کنیم زیرا با قالب نامگذاری که تصمیم گرفتیم مطابقت دارد. . به غیر از آن، استفاده از فیلد در سند واقعی اساساً یکسان است:
{ DOCVARIABLE "BkMk04" }