سبد خرید 0

وبلاگ

اجرا کردن userform در اکسل و روش های بستن آن

افرادی که شروع به طراحی یوزرفرم(userform) و کدنویسی در محیط VBA اکسل می کنند، اولین سوالی براشون پیش میاد این هست که نحوه اجرا کردن userform در اکسل چگونه هست و در پی اون هم چگونه باید userform رو ببنده.اگر یادتون باشه ما در بحث فرم ورود اطلاعات با نحوه ایجاد انواع فرم ورود اطلاعات از جمله یوزرفرم در اکسل آشنا شدیم.اکنون با ما باشید تا نحوه ران کردن userform و بستن یوزرفرم را یاد بگیریم.

نحوه اجرا کردن userform در اکسل

برای اجرا کردن userform در اکسل کافیست بعد از نوشتن نام یوزرفرم، عبارت SHOW را بنویسید.برای مثال من دوتا یوزرفرم دارم که میخوام بواسطه فرم اول، فرم دوم را فراخوانی کنم. userform1 را انتخاب و روی دکمه “نمایش فرم” دبل کلیک کنید تا وارد محیط کدنویسی شوید یا روی دکمه راست کلیک و گزینه View Code را بزنید.اکنون در رویداد Click کد زیر را بنویسید ( شکل شماره 1) :

userform در اکسل
شکل شماره 1 – userform در اکسل

برای اجرا کردن userform اکنون دکمه F5 را بزنید تا userform1 اجرا شود.اکنون اگر روی دکمه “نمایش فرم” کلیک کنید فرم شماره 2 برای شما نمایش داده می شود.برای نمایش یوزرفرم می توانید از عبارت Me هم استفاده کنید.درواقع کد Me اشاره به آبجکتی دارد که داریم برای اون کدنویسی می کنیم و هیچ وابستگی به نام آبجکت(مثلا userform) ندارد.

تغییر دادن نام پیشفرض یوزرفرم ها برای اجرا کردن userform

برای ران کردن userform قرار نیست همیشه از نام پیشفرض فرم ها استفاده کنید.شما با انتخاب یوزرفرم موردنظر و رفتن به تنظیمات فرم می توانید از قسمت (NAME) نام فرم را تغییر دهید.مثلا من نام فرم های خودم رو به my_form1 و my_form2 تغییر میدم.مانند شکل شماره 2

تغییر نام userform در محیط VBA
شکل شماره 2 – تغییر نام userform در محیط VBA

نکته:

هنگام تغییر نام userform بجای خط فاصله باید حتما از ( _ ) استفاده کنید تا با خطا مواجه نشوید.

نحوه بستن userform در اکسل

برای بستن userform سه روش وجود دارد :

  • استفاده از دکمه ضربدر قرمز رنگ خود فرم (تکلیف این روشن است و کاری با این روش نداریم)
  • استفاده از کد Unload
  • استفاده از کد Hide

بستن یوزرفرم با کد Unload :

بستن فرم دراین روش اینگونه هست که ابتدا کد Unload را می نویسید و با زدن یک خط فاصله (space) نام فرمی که می خواهید بسته شود را می نویسید.برای مثال من my_form2 را اجرا کردم و حالا می خواهم آنرا ببندم که از دو کد زیر می توانم استفاده می کنم:

بستن یوزرفرم با کد Hide:

برای بستن فرم می توان یکی از دو کد زیر را استفاده کرد:

تفاوت کدهای Unload و Hide در اجرا کردن userform

حتماً تا حالا این سوال براتون پیش اومده که اگر وظیفه هردو کد مخفی کردن یوزرفرم هست پس چه تفاوتی باهم دارند…!

اگر آبجکت های شما مثل textbox یا combobox دارای مقادیری باشند زمانی که شما از کد Hide برای بستن فرم استفاده میکنید اطلاعات را در خود نگه می دارد و دفعه بعد هنگام ران کردن userform آخرین اطلاعات ثبت شده را برای شما نشان می دهد.اما کد Unload عکس این کار را انجام می دهد.یعنی باعث می شود یوزرفرم هیچ اطلاعاتی در خود نگه ندارد.

مثلا در فرم زیر ما اطلاعاتی را داخل باکس ها نوشتیم.حال اگر ما از کد Unload برای بستن فرم استفاده کنیم، دفعه بعد که فرم را دوباره فراخوانی کردیم باکس ها خالی نشان داده خواهند شد.ولی اگر از کد Hide برای بستن فرم استفاده کنیم، دفعه بعد که دوباره این فرم رو ران کنیم همین اطلاعات داخل باکس ها خواهند بود.

اجرا کردن userform
شکل شماره 3 – نمایش و مخفی کردن یوزرفرم در اکسل

نتیجه گیری کلی

کد Hide با حفظ اطلاعات، فرم را می بندد ولی کد Unload با پاک کردن اطلاعات فرم را می بندد.

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



منبع:

stackoverflow.com

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

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

33 دیدگاه

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

  • سلام وقتتون بخیر
    من یوزر فرمم رو طراحی کردم و کدش هم نوشتم
    فقط اجرا کردنش با اکسل رو نمیدونم.
    و این کد UserForm2.Show کجا باید نوشته بشه؟
    من میخوام اکسل باز کردم این یوز فرم اتوماتیک اجرا بشه. نه در فضای VB.
    اجراش فقط در فضای ویژال بیسیک ، اطلاعاتی که تو فرم وارد میکنم داخل اکسل وارد میشه.
    اما اکسل ببندم یوزر فرم از بین میره باید ایمپورتش کنم و باز تو فضای ویژال بیسیک اجراش کنم.
    سپاس

  • سلام ممنون که همیشه برای مشکلاتمون وقت میذارید و راهنمایی میکنید. واقعا سپاس گزارم
    این کدی است که با دستورات شما برای دکمه ثبت نوشتم، حالا یک دکمه حذف میخوام بذارم که مطالب تکس باکس هارو پاک کنه تا بتونیم دوباره فرم پر کنیم و بعد ثبت بشه.
    Dim last_row
    last_row = Sheets(“kala”).Range(“a1048000”).End(xlUp).Row + 1
    Sheets(“kala”).Cells(last_row, 1) = TextBox1.Text
    Sheets(“kala”).Cells(last_row, 2) = TextBox2.Text
    Sheets(“kala”).Cells(last_row, 3) = TextBox3.Text
    Sheets(“kala”).Cells(last_row, 4) = TextBox4.Text
    Sheets(“kala”).Cells(last_row, 5) = TextBox5.Text
    Sheets(“kala”).Cells(last_row, 6) = TextBox6.Text
    Sheets(“kala”).Cells(last_row, 7) = TextBox7.Text
    Sheets(“kala”).Cells(last_row, 8) = TextBox8.Text
    Sheets(“kala”).Cells(last_row, 9) = TextBox9.Text
    Sheets(“kala”).Cells(last_row, 10) = TextBox10.Text
    Sheets(“kala”).Cells(last_row, 11) = TextBox11.Text
    کد پاک کردن تکس باکس ها.

    • انتهای کدتون کد زیر رو اضافه کنید :

      “”=TextBox1.Text
      “”=TextBox2.Text
      “”=TextBox3.Text

  • سلام و خدا قوت
    من یه یوزر فرم برای ورود به اکسل ساختم که شامل یوزرنیم و پسورد هست
    حالا میخوام پسورد به صورت ستاره دار در بیاد
    و محتوا پسورد نمایش داده نشه

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

      تکست باکس رو انتخاب کنید و از قسمت تنظیماتش مقدار گزینه PasswordChar رو کاراکتر ستاره (*) قرار بدین.

  • سلام طوری میتونم کلید ضربدر رو که باعث بسته شدن یوزر فرم میشه از بالای اون بردارم؟

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

      برای غیرفعال کردن آیکون ضربدر یوزرفرم میتونید از کد زیر در رویداد QueryClose مربوط به یوزرفرم استفاده کنید:

      Cancel = True

      • میخوام یوزر فرم ضربدر نداشته باشه
        آیا این امکان وجود داره چطوری؟

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

          نیاز به کدنویسی داره.

          اما راحت ترین راه این هست که ضربدر رو غیرفعال کنید.

          در رویداد QueryClose مربوط به UserForm کد زیر رو بنویسید:


          Cancel = True

  • سلام جاوید عزیز
    اول: اینکه اگه ممکنه میشه این رو برای من توضیح بدی last_row = Sheets(“kala”).Range(“a1048000”).End(xlUp).Row + 1
    دوم: اینکه من دارم یک یوزر فرم برای کاربری کارمندان میسازم.
    من از یک فایل حاوی یوزرفرمها در سیستم کارکنان و یک فایل به عنوان سرور در سیستم خودم و یک فایل به عنوان واسطه داخل شبکه استفاده کردم.
    الف) آیا پیشنهاد بهتری داری؟
    ب) اگر پیشنهادی نداری میتونی من رو در تبدیل کردن فایل حاوی یوزر فرمها به فایل exe و ساخت dll برای اون و نیز استفاده از قفلهای چند وجهی سخت افزاری یا نرم افزاری برای امنیت بیشتر راهنمایی کنید؟
    ممنونم از این همه زحمتی که برای ما میکشید.

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

      1- اگر دوره رایگان آموزش VBA رو تهیه کرده باشید ما در جلسه 23 و 24 کامل این کدهارو توضیح دادیم.

      2- هدفتان از اینکار رو توضیح ندادید برای همین نمیشه راهنمایی دقیقی کرد.

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

      • سپاس
        با تشکر از شما جناب مهندس؛ لازم به توضیح است که من پانزده کارمند دارم که البته ممکنه گسترش هم پیدا کنه
        و میخوام خودم سرور باشم و همه اطلاعات بقیه رو هم جمع آوری کنم و از اونها آنالیز بگیرم، بایگانی کنم، پرینت بگیرم و گزارش تهیه کنم و غیره
        اما سایر کارکنانم بهاطلاعات هم دسترسی نداشته باشند یا به سطح محدودی از اطلاعات که من اجازه میدم و همینطور بایگانی اطلاعات خودشون دسترسی داشته باشند
        البته ایجاد سه تا اکسل مجزا یعنی فرم و واسطه و سرور (موتوری که داخل سیستم خودم هست) دسترسی بقیه رو محدود کرده و مشکلی با این شیوه ندارم فقط نمیتونم روی سیستم خودم همزمان با اکسل دیگری رو باز کنم و روی اون کار کنم با توجه به این که من کارکنانی در خارج از مجموعه خواهم داشت که ممکنه برای دسترسی و گردش اطلاعات مجبور بشیم بعدها یک html هم به این سیستم اضافه کنیم. میخواستم ببینم شما پیشنهاد بهتری برای منسجمتر شدن کار دارید؟

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

            سوالتون رو واضح تر بپرسین

          • دقیق تر اینکه یک اکسل تحت شبکه برای کارکنانم میخوام که با ورود نام کاربری بخش محدود از قابلیتها در یوزرفرمهاشون ایجاد بشه
            این برای شرکت من حیاتی است

          • متاسفانه بدلیل حفظ امنیت در شبکه، امکان اجرای برخی کدهای VBA میسر نیست.

  • سلام مجدد
    من نیاز دارم به یک do while
    تا دو شرط را بررسی کنه
    اگر ایکس مساوی 1 عملیات 1
    و اگر ایکس مساوی 2 عملیات 2
    بعد دوباره این بررسی رو دوباره انجام بده

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

      خب شما شرطتون رو مشخص نکردید.

      شما به دستور دیگری به نام Select Case نیز نیاز دارید تا شرایط 1 و 2 رو داخل حلقه بررسی کنه.

  • مهندس جان سلام
    من در یوزر فرم خودم یک textbox برای نمایش و ویرایش توضیحات دارم ولی از ااونجایی که به صورت خطی نمایش داده میشه وقتی توضیحات زیاد میشه بخش زیاد اون رو نشون نمیده
    من میخوام که حالت اسکرول پیدا کنه و بقیه رو زیرش نمایش بده و نوار کنارش بالا پایین بشه مثل همین صفحه سایت چه کارباید کنم

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

      تکست باکس رو انتخاب کنید.سپس از تنظیمات سمت چپ گزینه Multiline رو درحالت True قرار بدین.

      • سلام Multiline رو درحالت True قرار دادم ولی برای نوشتار طولانی تر نیاز به یک نوار کنار صفحه دارم تا کاربر از آن برای دیدن بقیه نوشته و بالا پایین کردن متن استفاده کنه

        • از همون قسمت تنظیمات، یکی از گزینه های دلخواه Scroll Bars رو انتخاب کنید.

  • سلام خدا قوت
    در کمبوباکس برخی گزینه ها طولانی هستند راهی هست که من بدون بزرگتر کردن کامبوباکس همه محتوا نشون داده بشه؟

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

      یا باید براش کدنویسی بشه تا درصورت خارج شدن فونت از محدوده تکست باکس، اندازه فونت کوچکتر بشه یا می توانید از گرینه Multiline برای چندخطی شدن متن استفاده کنید.

  • برای نمایش و تایپ فارسی اعداد در تکس باکس چه کار باید انجام بدم؟

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

      در تنظیمات تکست باکس، گزینه Font رو زده و از فونت های فارسی استفاده کنید.

      • از فونت فارسی استفاده کردم با این حال باز هم به صورت لاتین نمایش داده میشه چیکار کنم؟

        • برخی فونت های فارسی فقط حروف رو بصورت فارسی نمایش می دهند و اعداد به همان شکل لاتین می ماند. و یا اگر بین کارکاتر ها از کاراکتر لاتین استفاده شود ممکن است نصف اعداد را فارسی و نصف دیگر را لاتین نمایش دهد.اگر باز حل نشد از تنظیمات کنترل پنل سیستم، کلا روی اعداد فارسی تنظیم کنید.

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