شلی در حال توسعه یک کلان است که همه جایگشتهای حروف بزرگ عبارت "به شرط آن" ("به شرط آن"، "مطمئن شد که" و غیره) را به حروف کوچک تغییر میدهد. انجام این کار به اندازه کافی آسان است، اما اگر عبارت یک جمله را شروع می کند، "P" باید با حروف بزرگ نوشته شود. شلی متعجب است که آیا راهی وجود دارد، در کلان، که بگوید عبارتی مانند "به شرطی که" در ابتدای جمله باشد یا خیر.
چند راه وجود دارد که می توانید در این مورد استفاده کنید. ابتدا می توانید از Find and Replace برای انجام جستجوها و جایگزینی های متوالی استفاده کنید. ماکرو می تواند کارهای زیر را انجام دهد:
- همه تغییرات "به شرط آن" را به حروف کوچک تغییر دهید.
- «. به شرط آن» (دوره، فاصله، «به شرط آن») جستجو کنید و آن را با «. مشروط بر آن» (با حروف بزرگ) جایگزین کنید.
- جستجو را تکرار کنید و در مرحله 2 با استفاده از سایر علائم نگارشی پایان جمله مانند علامت تعجب، علامت سوال یا هر یک از آن علائم نگارشی و به دنبال آن علامت نقل قول جایگزین کنید.
از آنجایی که این کار در یک ماکرو انجام می شود، فرآیند باید خیلی سریع انجام شود. در اینجا یک مثال از یکی است که می تواند این کار را انجام دهد:
Sub ChangeCase1()
Dim vFindText As Variant
Dim vReplaceText As Variant
Dim orng As Range
Dim i As Long
vFindText = Array(". provided that", _
"! provided that", _
"? provided that", _
"."" provided that", _
"!"" provided that", _
"?"" provided that")
vReplaceText = Array(". Provided that", _
"! Provided that", _
"? Provided that", _
"."" Provided that", _
"!"" Provided that", _
"?"" Provided that")
" Set all occurrences to lowercase
Set orng = ActiveDocument.Range
With orng.Find
.ClearFormatting
.Replacement.ClearFormatting
Do While .Execute(FindText:="provided that", _
Forward:=True, _
Wrap:=wdFindStop) = True
orng.Select
orng = "provided that"
orng.Collapse wdCollapseEnd
Loop
End With
" Account for end-of-sentence
For i = 0 To UBound(vFindText)
Set orng = ActiveDocument.Range
With orng.Find
.ClearFormatting
.Replacement.ClearFormatting
Do While .Execute(FindText:=vFindText(i), _
MatchCase:=True, _
Forward:=True, _
Wrap:=wdFindStop) = True
orng.Select
orng = vReplaceText(i)
orng.Collapse wdCollapseEnd
Loop
End With
Next
End Sub
یکی از کاستیهای این رویکرد این است که اجازه نمیدهد «به شرطی که» در ابتدای یک پاراگراف اتفاق بیفتد.
با این حال، یک رویکرد متفاوت وجود دارد که می توانید از آن استفاده کنید. این یکی بر یک تنظیم نسبتاً باطنی برای ویژگی Case متکی است: wdTitleSentence. این تنظیم همه کاراکترها (به استثنای یک استثنای قابل توجه) را به حروف کوچک تغییر می دهد و اگر عبارت در ابتدای جمله باشد، کاراکتر اول را به حروف بزرگ تغییر می دهد. در اینجا نحوه استفاده از آن در ماکرو آمده است:
Sub ChangeCase2()
With Selection.Find
.ClearFormatting
.Wrap = wdFindContinue
.Forward = True
.Format = True
.MatchCase = False
.MatchWildcards = False
.Text = "provided that"
.Execute
While .Found
Selection.Range.Case = wdLowerCase
Selection.Range.Case = wdTitleSentence
Selection.Collapse Direction:=wdCollapseEnd
.Execute
Wend
End With
End Sub
توجه داشته باشید که در حلقه while دو تخصیص به ویژگی Case داده شده است. اولی انتخاب (آنچه پیدا شد) را با حروف کوچک و دومی آن را روی حروف عنوان برای جمله تنظیم می کند. تنظیم حروف کوچک برای رسیدگی به "یک استثنای قابل توجه" که ذکر کردم مشخص شده است - اگر متن "PROVIDED that" در ابتدای جمله باشد، تنظیم wdTitleSentence به دلایلی آن را به "Provided that" تغییر نخواهد داد. با این حال، "به شرط اینکه" (که "PROVIDED that" پس از تنظیم آن به حروف کوچک تبدیل می شود) بدون مشکل به "Provided that" تغییر می کند.