رابرت پوشه ای دارد که اسناد زیادی در آن وجود دارد. او راهی میخواهد که تمام کلمات غلط املایی را از اسناد بیرون بکشد و آن کلمات را در یک سند جدید قرار دهد.
خوشبختانه Word این کار را با استفاده از ماکرو نسبتاً آسان می کند. این به این دلیل است که خطاهای املایی در VBA با بررسی مجموعه .SpellingError قابل دسترسی هستند. هر مورد در این مجموعه ویژه نشان دهنده یک خطای املایی در سند است.
با در نظر گرفتن این موضوع، ماکرو زیر نشان می دهد که چگونه می توان تمام اشتباهات املایی را از هر سند در یک پوشه جمع کرد.
Sub CheckFolderForSpellErrors()
"Copy all misspelled words in each document
"from one directory to a new document.
"Also lists all documents that have no spelling errors
Dim cWords As New Collection
Dim cDocs As New Collection
Dim vItem As Variant
Dim rng As Range
Dim docSourse As Document
Dim docNew As Document
Dim vDirectory As String
Dim vFile As String
Dim bNoSpellingErrors As Boolean
Application.ScreenUpdating = False
vDirectory = "C:MyFolder" " Path to check
" Find first file to check
vFile = Dir(vDirectory & "*.doc*")
Do While vFile <> ""
Documents.Open FileName:=vDirectory & vFile
Set docSource = ActiveDocument
If docSource.SpellingErrors.Count > 0 Then
cWords.Add Item:="Spelling errors found in " & vFile & vbCrLf
" add each word to the collection
For Each rng In docSource.SpellingErrors
cWords.Add Item:=rng.Text & vbCrLf
Next
Else " doc has no spelling errors
bNoSpellingErrors = True
cDocs.Add vFile & vbCrLf
End If
ActiveDocument.Close (wdDoNotSaveChanges)
vFile = Dir
Loop
Set docNew = Documents.Add
For Each vItem In cWords
Selection.TypeText vItem
Next
If bNoSpellingErrors Then
Selection.TypeText "These documents have no spelling errors." & vbCrLf
For Each vItem In cDocs
Selection.TypeText vItem & vbCrLf
Next
End If
Application.ScreenUpdating = True
End Sub
ماکرو از دستور Dir برای یافتن هر فایلی در پوشه مشخص شده (متغیر vDirectory) استفاده می کند که به نوعی از "doc" ختم می شود. هر کدام از این فایل ها به نوبه خود در Word بارگذاری می شوند. در حین بارگیری، مجموعه .SpellingErrors بررسی می شود تا ببینیم آیا خطا دارد یا خیر. اگر اینطور باشد، متن کلماتی که املای اشتباه دارند به مجموعه cWords اضافه می شود. اگر نشد، نام فایل به مجموعه cDocs اضافه می شود.
هیچ چیز خاصی در مورد cWords یا مجموعه های cDocs وجود ندارد. آنها به سادگی برای نگهداری هر گونه خطای املایی و نام فایل ها در هنگام بررسی پرونده ها ایجاد شده اند. ماکرو به همین راحتی می توانست از آرایه های متغیر به جای مجموعه ها استفاده کند.
هنگام اجرای این ماکرو باید به چند نکته توجه داشت. اولاً، بسته به تعداد اسناد موجود در پوشه و طول هر یک از آن اسناد، ممکن است مدت زیادی طول بکشد. وقتی ماکرو را اجرا کردم، این کار را در پوشه ای انجام دادم که شامل 9 سند بود که به طور متوسط حدود 97 صفحه در هر سند بود. فقط کمتر از 8 دقیقه طول کشید تا ماکرو کامل اجرا شود، و در حالی که در حال اجرا بود، من نمیتوانستم کار دیگری در Word انجام دهم. (در واقع، ممکن است به راحتی از خود بپرسید که آیا سیستم شما "هنگ شده است.")
نکته دیگری که باید در نظر داشت این است که خروجی می تواند بسیار طولانی باشد و نسبتاً اضافی به نظر برسد. این به این دلیل است که کلمات غلط املایی می توانند چندین بار در مجموعه .SpellingErrors ظاهر شوند. به عنوان مثال، فرض کنید سندی دارید که حاوی کلمه "Cftype" است، که آشکارا به عنوان اشتباه املایی علامت گذاری شده است. اگر این کلمه 30 بار در سند استفاده شود، 30 بار علامت گذاری می شود و در نتیجه 30 بار به پایان می رسد. اگر چه خارج از محدوده این نکته است، می توانید ماکرو را تغییر دهید تا بررسی کنید که آیا یک کلمه قبلاً به عنوان غلط املایی علامت گذاری شده است یا خیر و سپس آن را فقط در صورتی که دارای غلط املایی منحصر به فرد باشد اضافه کنید.