ایجاد سوال
dark_mode
0 دوستدار 0 امتیاز منفی
23 visibility
موضوع: آفیس توسط:

مری برای افزودن متن به اسناد خود از ماکروها استفاده می کند. مشکل این است که اگر متن اضافه شده حاوی آپستروف باشد، آن ها به عنوان "مستقیم" به جای "هوشمند" به متن اضافه می شوند. او نشان می‌دهد که تنظیمات 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 عبور دهید. ماکرو نقل قول های مناسب برای استفاده را تعیین می کند و سپس تبدیل ها را انجام می دهد. با وجود فاصله یا عدم وجود فاصله قبل از نقل قول مشخص می کند که آیا یک نقل قول یک نقل قول ابتدایی یا پایانی در متن است. اگر وجود داشته باشد، فرض می شود که یک نقل قول آغازین باشد. اگر نه، پس این یک نقل قول پایانی است.

اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

looks_5نام شما برای نمایش - اختیاری
حریم شخصی : آدرس ایمیل شما محفوظ میماند و برای استفاده های تجاری و تبلیغاتی به کار نمی رود
عدد چهار رقمی در تصویر را وارد کنید

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
اگر حساب گوگل دارید به راحتی وارید شوید

0 پاسخ وجود دارد

سوالات مشابه

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما
0 دوستدار 0 امتیاز منفی
0 پاسخ 25 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 23 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 33 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 19 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 30 visibility

23.7k سوال

9.0k پاسخ

614 دیدگاه

11.2k کاربر

229 نفر آنلاین
0 عضو و 229 مهمان در سایت حاضرند
بازدید امروز: 12925
بازدید دیروز: 17853
بازدید کل: 20325109
...