کیت باید فقط برای سرصفحهها و پاورقیهای یک سند تعداد کلمات ایجاد کند، و او در مورد نحوه انجام این کار دچار مشکل است.
هیچ راه خودکاری برای انجام آن وجود ندارد، اما میتوانید یک ماکرو ایجاد کنید که تعداد آن را مشخص کند. VBA به شما این امکان را می دهد که به راحتی از سربرگ های هر بخش از سند خود عبور کنید و سپس می توانید تعیین کنید که در هر سرصفحه چند کلمه وجود دارد. یک روش استفاده از یک ماکرو مانند زیر است:
Sub CntHeaderWords()
Dim s As Section
Dim h As HeaderFooter
Dim sRaw As String
Dim Cnt As Long
Dim J As Integer
Cnt = 0
For Each s In ActiveDocument.Sections
For Each h In s.Headers
If Not h.LinkToPrevious Or s.Index = 1 Then
For J = 1 To h.Range.Words.Count
sRaw = h.Range.Words(J)
sRaw = Trim(sRaw)
If sRaw = vbCrLf Then sRaw = ""
If sRaw = vbCr Then sRaw = ""
If sRaw = vbLf Then sRaw = ""
If Len(sRaw) > 0 Then Cnt = Cnt + 1
Next J
End If
Next h
Next s
MsgBox Cnt & " words in headers"
End Sub
هنگامی که این ماکرو را اجرا می کنید، از هر بخش در سند و سپس هر سرصفحه در آن بخش عبور می کند. تعداد کلمات برای هر هدر تعیین می شود و به متغیر Cnt اضافه می شود. وقتی ماکرو کامل شد، تعداد کلمات سرصفحه سند را نمایش می دهد.
چند نکته جالب در مورد این ماکرو وجود دارد. ابتدا توجه کنید که ماکرو خاصیت LinkToPrevious را برای هدر بررسی می کند. این کار به این دلیل انجام می شود که در بخش های فراتر از اول، سرصفحه های پیوندی پردازش نمی شوند. چرا؟ زیرا اضافه کردن کلمات برای سرصفحه هر بخش منطقی نیست اگر آن هدر مانند قسمت قبلی باشد.
در مرحله بعد، از آنجایی که میتوانید برای هر سرصفحه یک ویژگی Count برای مجموعه Words تعیین کنید، ممکن است فکر کنید که میتوانید به سادگی همه آن تعداد را با هم اضافه کنید تا تعداد کل کلمات خود را تعیین کنید. مشکل این است که حتی اگر برای یک بخش سرصفحه ای وجود نداشته باشد، Word تعداد کلمات 1 را برای سرصفحه "ضمنی" برمی گرداند. به همین دلیل است که ماکرو در واقع هر کلمه را در هدر بررسی می کند، و اگر چیزی جز یک بازگشت یا تغذیه خط نباشد، در شمارش گنجانده نمی شود.
نکته دیگری که باید به آن توجه کنید این است که اگر در سرصفحه خود علامت نگارشی دارید، هر علامت نگارشی به عنوان یک کلمه به حساب می آید. به عنوان مثال، اگر عنوان "همه حقوق محفوظ است" را داشته باشید، Word آن را سه کلمه در نظر می گیرد. اگر سرصفحه "کلیه حقوق محفوظ است." (با دوره انتهایی)، سپس Word آن را چهار کلمه در نظر می گیرد. نتیجه این است که اگر فکر میکنید ممکن است در سرصفحههای شما علائم نگارشی وجود داشته باشد، ممکن است بخواهید کد ماکرو را طوری تنظیم کنید که علائم نگارشی به حساب نیاید.
در نهایت، باید توجه داشته باشید که اگر هدر شما حاوی اشیایی مانند جعبه متن یا جدول باشد و آن اشیا حاوی کلمات باشند، به تعداد کلمات اضافه نمی شوند. اگر چنین اسنادی را توسعه می دهید، ممکن است بخواهید ماکرو را برای در نظر گرفتن آن اشیاء تنظیم کنید.
این ماکرو فقط تعداد کلمات را برای سرصفحه های یک سند برمی گرداند. اگر می خواهید به جای آن تعداد کلمات هم برای سرصفحه ها و هم برای پاورقی ها وجود داشته باشد، می توانید ماکرو را به این صورت تنظیم کنید:
Sub CntHFWords()
Dim s As Section
Dim h As HeaderFooter
Dim f As HeaderFooter
Dim sRaw As String
Dim HdCnt As Long
Dim FtCnt As Long
Dim J As Integer
HdCnt = 0
FtCnt = 0
For Each s In ActiveDocument.Sections
For Each h In s.Headers
If Not h.LinkToPrevious Or s.Index = 1 Then
For J = 1 To h.Range.Words.Count
sRaw = h.Range.Words(J)
sRaw = Trim(sRaw)
If sRaw = vbCrLf Then sRaw = ""
If sRaw = vbCr Then sRaw = ""
If sRaw = vbLf Then sRaw = ""
If Len(sRaw) > 0 Then HdCnt = HdCnt + 1
Next J
End If
Next h
For Each f In s.Footers
If Not f.LinkToPrevious Or s.Index = 1 Then
For J = 1 To f.Range.Words.Count
sRaw = f.Range.Words(J)
sRaw = Trim(sRaw)
If sRaw = vbCrLf Then sRaw = ""
If sRaw = vbCr Then sRaw = ""
If sRaw = vbLf Then sRaw = ""
If Len(sRaw) > 0 Then FtCnt = FtCnt + 1
Next J
End If
Next f
Next s
sRaw = "Header words: " & HdCnt & vbCrLf
sRaw = sRaw & "Footer words: " & FtCnt & vbCrLf
sRaw = sRaw & "Total words: " & HdCnt + FtCnt
MsgBox sRaw
End Sub
این نسخه از ماکرو دقیقاً همان روش شمارش را برای هر پاورقی اعمال می کند که برای هر سرصفحه اعمال می شود و تعداد فردی و کل را در انتهای ماکرو نمایش می دهد.