دیوید یک نویسنده است و از چککنندههای املایی، سبک و دستور زبان Word بسیار استفاده میکند. گاهی اوقات میبیند که پیشنهادات Word برای تصحیح گرامر بد هستند و یاد گرفته است که آنها را نادیده بگیرد. یکی از مواردی که او با آن مشکل دارد استفاده از گیومه در اطراف دیالوگ است. Word تشخیص نمی دهد که آیا دیوید یک علامت نقل قول را در آخر یا ابتدای جمله رها کرده است یا خیر. او به یاد می آورد که سال ها پیش از یک برنامه پردازش کلمه استفاده کرده بود که علامت نقل قول سبز رنگ را روی سند شما برای نشان دادن یک علامت نقل قول از دست داده بود. او فکر می کند که آیا Word می توان گیومه های گم شده را تشخیص داد.
هیچ راهی برای انجام این کار به صورت بومی در Word وجود ندارد. دلیل آن احتمالاً در این واقعیت خلاصه می شود که تقریباً غیرممکن است که تعیین کنید یک نقل قول شروع و پایان کجا باشد. به عنوان مثال، اگر شما یک پاراگراف حاوی چهار جمله داشته باشید و یک علامت نقل قول در جایی در آن پاراگراف قرار دهید، Word چگونه تعیین می کند که آیا آن علامت شروع یا پایان یک نقل قول را مشخص می کند؟ اگر ابتدا باشد، Word چگونه میداند که علامت پایان باید در انتهای جمله، انتهای جمله دوم یا انتهای پاراگراف باشد؟ (اگر نقل قول پایانی باشد، همان معمای پیش میآید، اما گیجی قرار دادن به جای سمت راست به سمت چپ گسترش مییابد.)
این سردرگمی بالقوه را با این واقعیت ترکیب کنید که علامت نقل قول پایانی ممکن است حتی در پاراگراف فعلی نباشد - این ممکن است در پایان پاراگراف بعدی باشد، زمانی که گفتگوی علامت گذاری شده واقعاً به پایان می رسد.
با این حال، می توانید یک ماکرو ایجاد کنید که حداقل برخی از بررسی های اولیه را برای شما انجام دهد. ماکرو زیر به ابتدای سند میرود و اولین علامت نقل قول را جستجو میکند. سپس همه چیز را از آن شخصیت تا انتهای پاراگراف بررسی می کند. اگر از نقل قول های غیر هوشمند استفاده می کنید، اساساً بررسی می کند که آیا تعداد علامت نقل قول زوج وجود دارد یا خیر. اگر از نقلقولهای هوشمند استفاده میکنید، بررسی میکند که آیا برای هر نقلقول شروع یک نقل قول پایانی وجود دارد یا خیر. اگر هر یک از شرط ها نادرست باشد، متن برجسته می شود.
Sub MarkUnevenQuotes()
Dim sRaw As String
Dim iNorm As Integer
Dim iSmart As Integer
Dim J As Long
Selection.HomeKey Unit:=wdStory
Application.ScreenUpdating = False
Selection.Find.ClearFormatting
With Selection.Find
.Text = """"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
While Selection.Find.Found
Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
sRaw = Selection.Text
iNorm = 0
iSmart = 0
For J = 1 To Len(sRaw)
If Mid(sRaw, J, 1) = Chr(34) Then
If iNorm > 0 Then
iNorm = iNorm - 1
Else
iNorm = iNorm + 1
End If
End If
If Mid(sRaw, J, 1) = Chr(147) Then
iSmart = iSmart + 1
End If
If Mid(sRaw, J, 1) = Chr(148) Then
iSmart = iSmart - 1
End If
Next J
If iNorm > 0 Or iSmart > 0 Then
Selection.Range.HighlightColorIndex = wdYellow
End If
Selection.Collapse Direction:=wdCollapseEnd
Selection.Find.Execute
Wend
Selection.HomeKey Unit:=wdStory
Application.ScreenUpdating = True
End Sub
هنگامی که ماکرو انجام شد، آنچه در نهایت با آن مواجه می شوید مجموعه ای از متن های انتخابی است که در صورت نیاز به بررسی بصری برجسته می شوند. با این حال، ماکرو نمیتواند نقل قولهای پایانی را پیدا کند که خارج از پاراگراف است که اولین نقل قول در آن اتفاق میافتد.