۷ اشتباه در کدنویسی VBA که ممکن است شما هم مرتکب شوید ؟
سلام به علاقمندان وب سایت سافت پلاس و علاقمندان برنامه نویسی VBA . در این مطلب می خواهیم راجع به 7 اشتباه رایج در برنامه نویسی VBA با هم صحبت کنیم .
خیلی ها هستند که در حین کد نویسی چه در اکسل یا اکسس و یا هر نرم افزار دیگری که از برنامه نویسی VBA پشتیبانی می کند یک سری کارهایی انجام می دهند که نباید انجام بدهند .
یا برعکس خیلی ها هم هستند که کارهایی را که باید انجام بدهند را پشت گوش می اندازند یا به آنها اهمیت نمی دهند . هر دو دسته از این افراد به نحوی اشتباه می کنند .
حالا در این بین بعضی از مواقع هست که اکسل و محیطی که در داخل آن برنامه نویسی می کنیم ؛ بواسطه بعضی از همین اشتباهات از ما ایراد گرفته و جلوی اجرای کدهای ما را می گیرد .
این همان چیزی است که در برنامه نویسی از آن تحت عنوان خطا اسم می بریم .
اما یک سری از اشتباهات هم هستند که چون در روند اصلی کد نویسی و اجرای کدهای نوشته شده اختلالی ایجاد نمی کنند، هم از طرف اکسل نادیده گرفته می شوند و هم از طرف ما به عنوان برنامه نویس.
در حالت اول که تکلیف مشخص است . چون اکسل اشتباه ما را در قالب خطا درآورده است باید حتما آن خطا را برطرف کنیم تا اکسل به ما اجازه ادامه کار را بدهد .
بنابراین باید وارد فرآیند خطایابی بشویم .
خطایابی در برنامه نویسی وی بی ای خودش یک داستان مفصلی دارد که هم در دوره جامع برنامه نویسی وی بی ای در اکسل بصورت مفصل راجع به آن صحبت کرده ام .
اما امروز می خواهم با هم چند تا مورد را بررسی کنیم . همین اول یک نکته را بگویم .
نکته این است که این موارد را مطمئنا نمی شود جزو خطاهای برنامه نویسی به حساب آورد چون وجود آنها هیچ اختلالی در فرآیند کد نویسی و اجرای کدها ایجاد نمی کنند .
اینها صرفا توصیه هایی هستند که در نظر گرفتن آنها می تواند کمک خیلی زیادی در فرآیند کد نویسی ما ایجاد کنند و از طرفی یک جورهایی باعث می شوند که سرعت اجرای کدهای ما خیلی بالاتر برود .
من علیرضا شهرآئینی هستم و خوشحال خواهم شد که تا انتهای این مطلب همراه من باشید .
اشتباه شماره 1: استفاده از select. و Activate.
مطمئن هستم که تا به حال از این دو تا عبارت در کد نویسی خودتان خیلی زیاد استفاده کرده اید . اما تصورش را هم می کردید که استفاده از آنها یک کار نادرست و اشتباه باشد ؟
می پرسید چرا ؟ پاسخش ساده است چون در 99 درصد از مواقع اصلا نیازی به استفاده از این دو تا عبارت در داخل کدهای خودتان ندارید .
حالا حتما می پرسید چطور چنین چیزی ممکن است ؟
بیایید همه چیز را در عمل به شما نمایش بدهم . به کدهای زیر نگاه کنید .
Sub test()
Worksheets("sheet2").Activate
Sheets(2).Range("a1:b10").Select
Selection.Interior.Color = vbRed
End Sub
اینجا ما در دو خط از کدهای خودمان از عبارت های Select و Activate استفاده کردیم . خروجی این کدها این است که سلول های محدوده A1 تا B10 را به رنگ قرمز در می آورد .
حالا به کدهای زیر نگاه کنید .
Sub test()
Worksheets("sheet2").Range("a1:b10").Interior.Color = vbGreen
End Sub
خروجی هر دو تا این کدها با هم یکی است . اما می بینید ما در هیچ جایی از کدهای دوم نه از Activate استفاده کردیم و نه از Select .
حالا باورتان شد که ما اصلا نیازی به استفاده از این دو تا عبارت در کدهای خودمان نداریم .
با این وجود باز هم ممکن است عده ای بپرسند که حالا اگر از این دو تا عبارت هم در کد نویسی خودمان استفاده کنیم مگر چه اتفاقی می افتد ؟
خٌب مسلما وقتی که حجم داده هایی که توی اکسل دارید کم باشد و یا اینکه تعداد خطوط کدی که استفاده می کنید محدود به چند تا خط کد ساده باشد، با استفاده از این دو تا عبارت هیچ اتفاق خاصی نمی افتد .
اما وقتی که حجم داده ها زیاد و تعداد کدها هم خیلی زیاد باشند واقعا استفاده مداوم از این دو تا عبارت می تواند دردسر ساز باشد چون باعث کاهش اجرای سرعت کدهای شما می شود .
چون هر بار که شما از این دو تا عبارت استفاده می کنید اکسل می خواهد بلافاصله خودش را بروز رسانی کند و این بروز رسانی ها خودش زمان گیر خواهد بود و از این طریق سرعت اجرای کدهای شما خیلی پایین می آید .
راستی در مورد اینکه چطوری می توانید سرعت اجرای کدهای خودتان را در اکسل بالا ببرید حتما به مطلب فوق العاده با این ۷ روش سرعت اجرای کدهای VBA را ۱۰ برابر کنید . مراجعه کنید .
اشتباه شماره 2: استفاده از دیتا تایپ Variant
ما توی برنامه نویسی وی بی ای چه در اکسل و چه در اکسس با انواع مختلفی از دیتا تایپ ها سر و کارد داریم . قبلا در مطلب ” مرجع کامل آشنایی با انواع داده ها در برنامه نویسی VBA ” راجع به همه آنها با هم صحبت کردیم .
در بین همه این دیتا تایپ ها ما یک دیتا تایپی داریم به اسم Variant .متغیری که دیتا تایپ آن از نوع واریانت باشد می تواند هر نوع داده ای را در خودش ذخیره کند.
اما این کار یک اشکال بزرگ دارد و آن هم حجم زیادی است که نوع دیتا تایپ به خودش اختصاص می دهد در صورتی که ممکن است اصلا به این حجم از اطلاعات احتیاجی نداشته باشیم .
پس در استفاده از این نوع دیتا تایپ باید خیلی دقت کنید و تا زمانی که مجبور نشده اید نباید به سراغ استفاده از این نوع داده بروید .
اشتباه شماره 3: تعریف نادرست متغیرها
این از آن اشتباهاتی است که بعضی از برنامه نویسان مرتکب آن می شوند اما روحشان هم خبر ندارد که دچار این اشتباه شده اند .
این اشتباه این است که برنامه نویس برای یک یا چند تا متغیر یک نوع خاصی از داده را در نظر می گیرد اما غافل از اینکه این فقط تصور نادرستی است که برنامه نویس دارد . چرا ؟
بیایید همه چیز را با یک مثال بررسی کنیم . به کدهای زیر نگاه کنید .
Dim a , b , c As Long
در یک خط کد بالا ما سه تا متغیر را تعریف کردیم . این کار هیچ ایرادی ندارد و وی بی ای این اجازه را به ما می دهد که با استفاده از یک کلمه کلیدی Dim هر تعداد متغیر را که مد نظر داریم تعریف کنیم .
اما ایراد کار اینجاست که یک برنامه نویس مبتدی اینطور تصور می کند که هر سه تا متغیری که تعریف کرده همه از یک دیتا تایپ استفاده می کنند .
اما در واقعیت اینطور نیست .
واقعیت این است که از این سه تا متغیر فقط آخرین متغیر یعنی متغیر C نوع داده اش از نوع Long است . اما دو تا متغیر اول چه نوع داده ای دارند ؟
در واقع دو تا متغیر اول دارند از نوع داده Variant استفاده می کنند . در صورتی که برنامه نویس تصور می کند این دو تا داده هم نوع داده شان با نوع داده سوم یکی است .
پس شما باید مراقب باشید که از این به بعد دچار این اشتباه نشوید .
اشتباه شماره 4: عدم استفاده از Screen Updating
این یکی از قابلیت های خیلی کاربردی در برنامه نویسی وی بی ای است اما خیلی کم دیده ام که توسط برنامه نویسان مبتدی استفاده شود و این خودش یک اشتباه بزرگ است .
اما اسکرین آپدیت چی هست ؟ چه کاربردی دارد ؟ و اینکه چطور می شود آن را تنظیم و استفاده کرد موضوع مفصلی است که علاقمند باشید می توانید زیر و بم کار با این قابلیت را در مطلب 7 روش برای 10 برابر کردن سرعت اجرای کدهای VBA در اکسل مطالعه کنید .
اشتباه شماره 5: استفاده از آدرس دهی نادرست در کدها
بعضی از مواقع هست که برنامه نویسان مبتدی می خواهند با استفاده از یک سری از کدها یک یا چند تا شی را مدیریت کنند . پس لازم است که آدرس و نام شی مورد نظر خودشان را به برنامه معرفی کنند .
تا به اینجای کار اشکالی وجود ندارد اما اشکال کار از نحوه آدرس دهی و نحوه نام بردن شی مورد نظر بروز می کند
بیایید یک مثال را بررسی کنیم .به کدهای زیر نگاه کنید
Sub test()
Dim ws As Worksheet
Set ws = Sheets("sheet2")
ws.Range("a1:d10").Interior.Color = vbGreen
End Sub
این کدها هیچ ایرادی ندارند و به خوبی هم اجرا می شوند اما ایراد و اشکال کی می تواند بروز کند .
اگر به کدهای بالا دقت کنید در خط شماره 5 من از یک شیت به اسم sheet2 اسم برده ام .
اما فرض کنید که کاربر بیاید و در محیط اکسل اسم این شیت را عوض کند ، آن وقت فکر می کنید که چه بر سر کدهای من می آید .
بله اجرای این کدها با خطا مواجه می شود . چرا ؟
چون دیگر شیتی به این اسم وجود ندارد که اکسل بخواهد آن را پیدا کند . پس چه کار باید کرد و چطور اسم یک شیت را در کدهای خودمان استفاده کنیم ؟
پاسخ این سوال را در کلیپ کوتاه زیر می توانید مشاهده کنید .
اشتباه شماره 6: نام گذاری متغیرها بصورت نادرست
واقعیت این است که زبان برنامه نویسی وی بی ای سخت گیری زیادی برای نام گذاری متغیرها انجام نمی دهد . فقط چند تا قانون خیلی ساده هست که حتما باید آنها را رعایت کنید .
من قبلا در مورد این قوانین در مطلب آشنایی با مفهوم متغیرها در برنامه نویسی VBA صحبت کرده ام حتما به این مطلب مراجعه و با این قوانین آشنا شوید .
اما این وسط یک سری از کارها هست که بعضی از برنامه نویسان مبتدی انجام می دهند که هر چند از طرف اکسل خطا محسوب نمی شود اما خب در جای خودش می تواند برای برنامه نویس دردسرهایی درست کند .
این اشتباهات چی هستند ؟
اولین اشتباه انتخاب اسم های بی معنی برای متغیرهاست . می پرسید یعنی چی ؟
به کد زیر نگاه کنید .
dim a as string
من اینجا یک متغیر تعریف کرده ام به اسم a و نوع آن را هم از نوع متن در نظر گرفته ام . اما فکر می کنید این متغیر قرار است چه چیزی را در داخل خودش ذخیره کند ؟ اسم یک فرد ؟اسم یک ماشین ؟ یا اسم یک خیابان ؟
واقعیت این است که من هم نمی دانم . اما شاید باز سوال بپرسید که اصلا از کجا می شود فهمید که این متغیر قرار است چه چیزی در داخلش ذخیره شود .
برای پاسخ به این سوال به کدهای زیر نگاه کنید .
dim firstname as string
dim lastname as string
dim mycar as string
اینجا من به جای یک متغیر سه تا متغیر را تعریف کرده ام . اگر به هر کدام از این متغیرها نگاه کنید خیلی ساده و راحت متوجه می شوید که قرار است هر کدام از آنها چه چیزی را در خودش ذخیره کند .
متغیر شماره 1 قرار است اسم افراد را ذخیره کند .
متغیر شماره 2 قرار است نام خانوادگی افراد را ذخیره کند .
متغیر شماره 3 هم قرار است اسم خودرویی که هر فرد دارد را ذخیره کند .
اینجا من می خواهم یک نکته را به شما بگویم . اینکه سعی کنید برای متغیرهایی که تعریف می کنید اسامی با معنی انتخاب کنید طوری که وقتی کسی به آنها نگاه می کند از روی اسم متغیر متوجه شود که قرار است در داخل آن چه چیزی ذخیره شود .
اشتباه شماره 7: عدم مدیریت کردن خطاها
به عنوان یک برنامه نویس یادتان باشد که وجود خطا در برنامه نویسی یک امر کاملا محال است .
پس از این فکر که بخواهید برنامه ای بنویسید که اصلا و به هیچ عنوان در داخل آن خطایی وجود نداشته باشد بیرون بیایید .
فقط در دو تا حالت است که وجود خطا می تواند چیز بدی باشد .
اول اینکه برنامه شما بیش از حد و اندازه دارای خطا باشد .
و حالت دوم که می تواند از حالت اول هم بدتر باشد این است که شما به عنوان یک برنامه نویس هیچ فکری به حال مدیریت کردن این خطاها در اکسل نداشته باشید .
پس شما به عنوان یک برنامه نویس باید در کنار سایر مهارت هایی که یاد می گیرید مهارت مدیریت کردن خطاها را هم بلد باشید تا مشخص کنید که برنامه شما در زمان بروز خطاهای مختلف چه واکنش و عکس العملی را از خودش به نمایش بگذارد .
اگر می خواهید بیشتر و بهتر در مورد خطا و خطایابی در ابرنامه نویسی وی بی ای بدانید من به شما مطلب روش های خطایابی کدهای وی بی ای را معرفی می کنم . توصیه می کنم که حتما به این مطلب مراجعه و ان را مطالعه کنید .
باز هم به انتهای یکی دیگر از مطالب مربوط به آموزش برنامه نویسی در اکسل رسیدیم .
امیدوارم که این مطلب برایتان کاربردی بوده باشد . خوشحال می شوم اگر نظر و یا ایده ای در مورد این مطلب دارید که به تکمیل تر کردن این مطلب کمک می کند را در بخش دیدگاهها مطرح کنید .
مطالب زیر را حتما مطالعه کنید
ذخیره نمودارها با کدهای VBAبصورت تصویر+راهنمای گام به گام
لیست باکس ها در برنامه نویسی VBA ؛ تمام چیزی که باید بدانید .
با این خطای Runtime Error 1004 در VBA چکار کنیم ؟
در این آموزش راجع به خطایی به اسم Run time error 1004 در برنامه نویسی وی بی ای با هم صحبت می کنیم .
دیدگاهتان را بنویسید