سبد خرید 0

وبلاگ

مشکل علامت سوال ؟ و رفع بهمریختگی فونت در اکسل

بهمریختگی فونت های فارسی در نرم افزارها و برخورد با مشکل علامت سوال ؟ بجای نمایش متن فارسی یکی از مشکلات همیشگی کاربران ایرانی بوده.مسلما برای شما هم پیش آمده که یک نرم افزار فارسی را در ویندوز خود نصب کرده اید ولی فونت ها بصورت ناخوانا و بهمریخته یا بصورت علامت سوال (؟) نشان داده است.نرم افزار اکسل هم از این مشکل مستثنی نیست.

مشکل نمایش علامت سوال ؟ در اکسل چگونه خود را نشان می دهد؟

مشکل بهمریختگی نمایش فونت های فارسی در اکسل بصورت علامت سوال (؟) در حالت های مختلفی خود را نشان می دهد که در زیر به مهترین آنها اشاره می کنیم:

  • هنگام استفاده از افزونه های فارسی: ممکن است شما از افزونه هایی استفاده می کنید که خروجی تابع آن یک متن فارسی باشد.در نتیجه خروجی تابع یک متن نامشخص و نامفهوم می شود.
  • هنگام استفاده از متن های فارسی در محیط VBA: زبان برنامه نویسیVBA یک زبان non unicode می باشد.بدین معنی که از استانداردهای رمزنگاری unicode پشتیبانی نمی کند.بدین دلیل هنگام استفاده از کاراکترهای فارسی آنرا بصورت کاراکترهایی بی معنی و نامفهوم نشان می دهد.

در شکل های زیر می توانید چند نمونه از حالت های بهمریختگی فونت های فارسی را مشاهده کنید:

نمایش عبارت های فارسی بصورت علامت ؟ و بهمریخته
شکل شماره 1 – نمایش عبارت های فارسی بصورت علامت ؟ و بهمریخته
نمایش جملات فارسی بصورت عبارت های نامفهوم و نامشخص
شکل شماره 2 – نمایش جملات فارسی بصورت عبارت های نامفهوم و نامشخص

راه حل رفع مشکل نمایش علامت سوال در فونت اکسل:

عمده ترین روشی هایی که می توان استفاده کرد به 3 حالت زیر می باشد:

1- تنظیمات زبان محلی ویندوز درسیستم خودتان:

ابتدا از Control Panel ویندوزتان به قسمت Region بروید و از تب Administrative روی دکمه …Change System Local کلیک کنید تا پنجره Region Setting باز شود(شکل شماره 3 ).حال از لیست مربوط به Current system local گزینه (Persian (Iran را انتخاب کنید.با اینکار برای اعمال تغییرات زبان در سیستم، ویندوز درخواست Restart می کند که Yes را بزنید تا سیستم ری-استارت شود.بعد از راه اندازی مجدد ویندوز، بررسی کنید که مشکل رفع شده یا خیر.

رفع مشکل علامت سوال ؟ و بهمریختگی فونت در اکسل
شکل شماره 3 – تنظیمات زبان ویندوز persian از قسمت Region

ممکن است در برخی قسمت ها مشکل علامت سوال ؟ فونت فارسی حل شده باشد ولی در سایر قسمت ها همچنان این مشکل پا برجا باشد.مثلا به شکل شماره 4 دقت کنید.با تنظیمات بالا نمایش فارسی نام شیت ها بصورت ؟ حل شده است ولی در محیط کدنویسی این مشکل برطرف نشده است.

حل مشکل نمایش حروف فارسی بصورت ؟ در نامگذاری شیت ها
شکل شماره 4 – حل مشکل نمایش حروف فارسی بصورت ؟ در نامگذاری شیت ها

اگر از نسخه های جدید ویندوز استفاده می کنید، گزینه ای به نام Use Unicode UTF-8 for worldwide language support اضافه شده . این گزینه برای استفاده از یونیکد های استاندارد برای پشتیبانی از کاراکترهای بیشتر می باشد.شما می توانید یکبار با تیک زدن و یکبار دیگر با تیک نزدن آن ببینید در کدام حالت مشکل شما را حل میکند.اما مشکلی که این روش دارد این است که اگر فایل را در سیستم دیگه ای باز کنید و اگر تنظیمات فوق در سیستم جاری اعمال نشده اشد، دوباره مشکل علامت سوال ؟ در متن فارسی و بهمریختگی فونت را خواهید داشت.

2- بایگانی جملات فارسی در یک شیت مخصوص:

در مواردی مثل نوشتن یک پیام فارسی در MsgBox یا نامگذاری آبجکت ها و… می توان جملات فارسی را در یک شیت مخصوص بصورت کدبندی نوشت و برای نمایش یک جمله، بجای تایپ مستقیم در محیط VBA به سلول مربوط به اون جمله ارجاع داد.برای مثال ما جمله ی “به جاویدسافت خوش آمدید” را در sheet1 و در سلول A1 نوشته ایم و اکنون می خواهیم این متن را از طریق یک کادر پیغام نشان دهیم.کد را بصورت زیر می نویسیم:

MsgBox Sheet1.Range("A1")

3- استفاده از تابع chrw در VBA :

یکی از روش هایی که افراد حرفه ای برای حل مشکل بهمریختگی فونت در اکسل استفاده می کنند، بکارگیری تابع chrw در VBA می باشد.در استاندارد UniCode هر کاراکتر در کیبورد یک معادل عددی دارد.برای مثال معادل عددی کاراکتر “ج” عدد 1580 می باشد.حال برای بدست آوردن معادل حروفی هر عدد می توان از تابع chrw استفاده کرد.برای مثال (1580)chrw که نتیجه کاراکتر “ج” خواهد بود.حال فرض کنید می خواهید یک کلمه یا جمله بسازید.برای اینکار با کنار هم قرار دادن این اعداد می توان یک جمله ساخت.

برای مثال فرض کنید من می خواهم کلمه “جاویدسافت” را تولید کنم.باید به روش زیر عمل کنم:

chrw(1580) & chrw(1570) & chrw(1608) & chrw(1740) & chrw(1583) & chrw(1587) & chrw(1570) & chrw(1601) & chrw(1578)

نکته:

در توابع بالا کاراکتر & که رشته الحاقی نام دارد، برای بهم چسباندن حاصل توابع chrw استفاده شده است.

عیبی که این روش دارد این است که برای تولید جملات بلند کمی به زحمت خواهید افتاد.اما این مورد رو هم فراموش نکنید که در محیط VBA کمتر پیش می آید که از جملات بلند استفاده شود.

unicode هر کاراکتر را چگونه بدست بیاوریم:

ابزارهای آنلاین تبدیل یونیکد:

وبسایت های زیادی ابزار آنلاین برای پیدا کردن یونیکد کاراکترهای فارسی وجود دارد که برای نمونه می توانید به این لینک مراجعه کنید.شما با وارد کردن حروف فارسی و زدن دکمه تبدیل، یونیکد اون حرف را برای شما نمایش می دهد.توجه داشته باشید که خروجی یک عدد با چند کاراکتر خواهد بود که شما فقط عدد اون رو بر می دارید.

دانلود فایل آماده یونیکد های حروف فارسی:

از لینک زیر می توانید لیست یونیکدهای حروف فارسی برای رفع مشکل بهمریختگی فونت در VBA را دانلود کنید:


منابع:

en.wikipedia.org/wiki/Unicode

fa.wikipedia.org

اشتراک گذاری:

مطالب زیر را حتما مطالعه کنید

2 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

  • با عرض سلام و خسته نباشید خدمت آقا جاوید و همه دوستان
    یک سوال داشتم ممنون میشم راهنمایی کنید
    فرض کنید تو یک شرکت صد نفر پرسنل داریم می خوایم مشخصات پرسنل رو به این شرح داشته باشیم :
    ردیف، نام و نام خانوادگی، شماره تلفن همراه، آدرس، آخرین مدرک تحصیلی، تصویر آخرین مدرک تحصیلی.
    الان مشکل اینه که اگه بخام تصویر مدرک تحصیلی رو توی همون شیت تو سلول قرار بدم باید اندازه سلول رو افزایش بدم و بقیه سلول ها هم ناچاراً بزرگ میشن. بنظرم یک راه حلش اینه که به یک شیت دیگه لینک بشیم و توی اون شیت، سایز سلول بزرگ و دلخواه داشته باشیم برای تصویر گواهینامه. الان مشکل من اینه که اگه بخام برای گواهینامه هر شخص یک شیت تعریف کنم تعداد شیت هام زیاد میشه که بنظرم منطقی نباشه. اگه همه عکس هام توی یک شیت باشه تشخیص عکس مورد نظر کمی سخت میشه ( منظورم اینه که غیر تصویر گواهینامه مورد نظر، تصویر گواهینامه های دیگه هم توی شیت معلومه ) سوال من اینه که آیا میشه بصورت پیش فرض تصویر گواهینامه ها رو invisible کرد و موقع فراخوانی یک تصویر، فقط تصویر اون گواهینامه رو نشون بده؟؟ همچین چیزی امکانش هست ؟
    این یک مورد …
    مورد دوم هم اینکه به نظر خودتون برای همچین موردی بهترین راه حل چیه؟؟
    تشکر از سایت خیلی خیلی خیلی خوب تون.

    • سلام. وقت بخیر

      مسلما ذخیره خود عکس داخل شیت ها کار اشتباهی هست.چون یکماه نشده فایل شما بسیار سنگین خواهد شد.

      شما باید عکس هارو داخل سیستم خودتون ذخیره کنید و از طریق کدنویسی فقط مسیر عکس رو مقابل هر پرسنل ذخیره کنید.اینجوری میتونید هرچندتا عکس که دلتون خواست به پرسنل اختصاص بدین

دیدگاهتان را بنویسید