ایسائو متعجب است که آیا راهی برای ایجاد آسان لیستی از تمام کلمات منحصر به فرد در یک سند وجود دارد؟ او نیازی ندارد که بداند هر کلمه چند بار ظاهر می شود، او فقط به لیستی از کلمات منحصر به فرد نیاز دارد.
هیچ تابع یا ابزار ورد داخلی برای انجام این کار وجود ندارد. با این حال، در VBA می توانید به مجموعه Words دسترسی داشته باشید که شامل تمام کلمات موجود در سند است. با در نظر گرفتن این موضوع، می توانید یک ماکرو ایجاد کنید که یک لیست مرتب شده از کلمات منحصر به فرد در سند ایجاد می کند و سپس آن کلمات را به انتهای سند اضافه می کند.
Sub UniqueWordList()
Dim wList As New Collection
Dim wrd
Dim chkwrd
Dim sTemp As String
Dim k As Long
For Each wrd In ActiveDocument.Range.Words
sTemp = Trim(LCase(wrd))
If sTemp >= "a" And sTemp <= "z" Then
k = 0
For Each chkwrd In wList
k = k + 1
If chkwrd = sTemp Then GoTo nw
If chkwrd > sTemp Then
wList.Add Item:=sTemp, Before:=k
GoTo nw
End If
Next chkwrd
wList.Add Item:=sTemp
End If
nw:
Next wrd
sTemp = "There are " & ActiveDocument.Range.Words.Count & " words "
sTemp = sTemp & "in the document, before this summary, but there "
sTemp = sTemp & "are only " & wList.Count & " unique words."
ActiveDocument.Range.Select
Selection.Collapse Direction:=wdCollapseEnd
Selection.TypeText vbCrLf & sTemp & vbCrLf
For Each chkwrd In wList
Selection.TypeText chkwrd & vbCrLf
Next chkwrd
End Sub
توجه داشته باشید که هر کلمه در سند استخراج می شود، به حروف کوچک تبدیل می شود و سپس به ترتیب مرتب شده به مجموعه wList اضافه می شود. کلمات فقط در صورتی اضافه می شوند که حروف الفبا باشند (بنابراین، اعداد حذف می شوند، همانطور که نشانه گذاری است)، و کلان توجهی به مورد کلمات نمی کند. همچنین باید توجه داشته باشید که ماکرو فقط به کلمات موجود در بدنه اصلی سند نگاه می کند. این شامل هیچ کلمه ای در مکان هایی مانند سرصفحه، پاورقی، جعبه متن، یا اشکال نیست.
ماکرو را می توان به راحتی تغییر داد تا نیازهای مختلف را فراهم کند. برای مثال، میتوانید از ماکرو بخواهید که فهرست کلمات را به جای اینکه در انتهای سند فعلی قرار دهد، در یک سند جداگانه بچسباند. تنها کاری که باید انجام دهید این است که این خط را قبل از خط خروجی که در اینجا نشان داده شده است وارد کنید:
sTemp = "There are " & ActiveDocument.Range.Words.Count & " words "
sTemp = sTemp & "in " & ActiveDocument.Name & ", but there "
sTemp = sTemp & "are only " & wList.Count & " unique words."
Documents.Add
ActiveDocument.Range.Select
Selection.Collapse Direction:=wdCollapseEnd
Selection.TypeText vbCrLf & sTemp & vbCrLf
For Each chkwrd In wList
Selection.TypeText chkwrd & vbCrLf
Next chkwrd
End Sub
توجه داشته باشید که تنها یک تغییر اساسی در کلان وجود دارد: اضافه کردن روش "Documents.Add" برای ایجاد سند جدید برای خلاصه.
برای برخی ایده های دیگر در مورد استخراج کلمات از یک سند - از جمله ماکروهایی که تعداد کلمات را محاسبه می کنند - ممکن است بخواهید به این نکته مراجعه کنید: ایجاد تعداد دفعات کلمات.