مری برای افزودن متن به اسناد خود از ماکروها استفاده می کند. مشکل این است که اگر متن اضافه شده حاوی آپستروف باشد، آن ها به عنوان "مستقیم" به جای "هوشمند" به متن اضافه می شوند. او نشان میدهد که تنظیمات AutoFormat As You Type را دارد که به Word میگوید به جای نقلقولهای مستقیم از نقل قولهای هوشمند استفاده کند، اما این روی متن درجشده توسط ماکروهای من تأثیری ندارد.
وقتی متنی را با استفاده از ماکرو به جای تایپ کردن در سند وارد میکنید، متن در هر مورد بهطور متفاوتی توسط Word مدیریت میشود. متنی که تایپ می کنید با وارد کردن هر کاراکتر پردازش می شود. متنی که توسط یک ماکرو درج می شود بیشتر شبیه متنی است که در یک سند جایگذاری شده است. بنابراین، اگر «این متن من است» را تایپ کنید، Word پس از هر کاراکتر پردازش خود را انجام می دهد. این بدان معناست که برنامه زمانی برای بررسی AutoFormatting و AutoCorrect و بقیه کارهایی که Word برای پردازش متن انجام می دهد وجود دارد.
هنگامی که از یک ماکرو برای وارد کردن همان متن استفاده می کنید، به عنوان یک بلوک درج می شود، گویی آن را در جای خود جایگذاری کرده اید. این بدان معنی است که هر کاراکتر در وسط متن (مانند نقل قول یا آپاستروف) که توسط AutoFormatting پردازش می شد، "گرفتار" و پردازش نمی شود. این به این معنی است که اگر نقل قولهای مستقیم در متنی که توسط ماکرو شما درج شده باشد، به نقلقول هوشمند تغییر نمیکنند.
چند راه وجود دارد که می توانید به راه حلی برای این موضوع نزدیک شوید. اولین مورد این است که ماکرو خود را داشته باشید، پس از اینکه تمام متن شما را درج کرد، عملیات Find and جایگزینی را انجام دهید تا همه نقل قول ها را با نقل قول و آپستروف ها را با آپستروف جایگزین کنید. این ممکن است عجیب به نظر برسد، اما اگر برای استفاده از نقلقولهای هوشمند، AutoFormat As You Type را تنظیم کرده باشید، عملیات یافتن و جایگزینی به تغییر نقل قولهای مستقیم به نقلقول هوشمند ختم میشود.
اگر ماکرو شما متن زیادی را در سند وارد کرده باشد، این روش راهی است. اگر تکههای کوچکتری از متن را وارد میکند، مطمئن شوید که ماکرو کدهای ASCII صحیح را برای شروع نقل قولهای هوشمند وارد میکند، آسانتر است. کدهای اسکی برای یک مظنه معمولی 34 است، اما یک مظنه هوشمند افتتاحیه دارای کد 147 و یک نقل قول پایانی 148 است. تفاوت های مشابهی در کدهای مورد استفاده برای آپوستروف ها وجود دارد. اگر از تابع Chr برای درج کاراکتر مناسب استفاده کنید، همیشه نقل قول هایی را که می خواهید خواهید داشت.
یکی از راههای انجام این کار این است که از کدهای مشابه زیر در ابتدای ماکرو خود استفاده کنید:
If Options.AutoFormatAsYouTypeReplaceQuotes = True Then
sAposOpen = Chr(145)
sAposClose = Chr(146)
sQuoteOpen = Chr(147)
sQuoteClose = Chr(148)
Else
sAposOpen = Chr(39)
sAposClose = Chr(39)
sQuoteOpen = Chr(34)
sQuoteClose = Chr(34)
End If
این کد بررسی می کند که آیا تنظیم AutoFormat As You Type برای نقل قول های هوشمند روشن است یا خیر. اگر اینطور باشد، چهار متغیر روی کدهای ASCII مناسب برای نقل قولهای هوشمند تنظیم میشوند. اگر روشن نباشد، متغیرها روی کدهای مناسب برای نقل قول های مستقیم تنظیم می شوند. بعداً می توانید از این متغیرها در ماکرو خود هنگام جمع آوری و درج متن استفاده کنید. به عنوان مثال، اگر می خواهید متن "خانه برادرم در خیابان است" را وارد کنید، می توانید آن را به این صورت وارد کنید:
sMyString = "my brother" & sAposClose & "s house is down the street"
Selection.InsertAfter " " & sMyString
اگر این رویکرد را آزاردهنده میدانید (از هم گسستن رشتههای خود به این روش)، یک گزینه دیگر وجود دارد. شما می توانید تابع خود را ایجاد کنید که جایگزین های مناسب را در رشته های شما در یک زمان انجام دهد. ماکرو زیر این کار را به خوبی انجام می دهد:
Function RepQuotes(sRaw As String) As String
Dim sTemp As String
Dim sAposOpen As String
Dim sAposClose As String
Dim sQuoteOpen As String
Dim sQuoteClose As String
If Options.AutoFormatAsYouTypeReplaceQuotes = True Then
sAposOpen = Chr(145)
sAposClose = Chr(146)
sQuoteOpen = Chr(147)
sQuoteClose = Chr(148)
Else
sAposOpen = Chr(39)
sAposClose = Chr(39)
sQuoteOpen = Chr(34)
sQuoteClose = Chr(34)
End If
sTemp = Replace(sRaw, " " & Chr(39), sAposOpen)
sTemp = Replace(sTemp, Chr(39), sAposClose)
sTemp = Replace(sTemp, " " & Chr(34), sQuoteOpen)
sTemp = Replace(sTemp, Chr(34), sQuoteClose)
RepQuotes = sTemp
End Function
کاری که شما انجام می دهید این است که رشته های متنی خود را به صورت عادی بسازید و سپس آنها را از طریق ماکرو RepQuotes عبور دهید. ماکرو نقل قول های مناسب برای استفاده را تعیین می کند و سپس تبدیل ها را انجام می دهد. با وجود فاصله یا عدم وجود فاصله قبل از نقل قول مشخص می کند که آیا یک نقل قول یک نقل قول ابتدایی یا پایانی در متن است. اگر وجود داشته باشد، فرض می شود که یک نقل قول آغازین باشد. اگر نه، پس این یک نقل قول پایانی است.