وبلاگ

اجرای خودکار ماکرو در اکسل

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

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

اجرای خودکار ماکرو در اکسل
کاری که قرار است انجام دهیم

هدف از آموزش اجرای خودکار ماکرو در اکسل:

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

ایجاد macro برای اجرای خودکار کدهای اکسل

برای اجرای خودکار ماکرو در اکسل ابتدا یک UserForm ایجاد کرده نام آنرا WelcomeForm قرار داده و داخل این فرم با استفاده از لیبل ها متن پیام خودتون رو یادداشت کنید. سپس به محیط VBA رفته و از قسمت Insert یک Module ایجاد کرده و بعد از باز کردن ماژول کد زیر را داخل آن کپی کنید مانند شکل شماره 1 .

Sub macro1()
WelcomeForm.Hide
Login_Form.Show
End Sub
نحوه-نمایش-فرم-لاگین-در-اکسل
شکل شماره 1 – کدنویسی اجرای فرم

در کد بالا macro1 نام ماکروی شماست که میتونید به دلخواه به هر نامی تغییر بدین.اکنون روی فرم WelcomeForm کلیک راست کرده و گزینه View Code رو بزنید تا صفحه کدنویسی باز بشه.حالا در رویداد Activate کد زیر رو قرار بدید مانند شکل شماره 2 .

Private Sub UserForm_Activate()
Application.OnTime Now + TimeValue("00:00:03"), "macro1"
End Sub
اجرای خودکار ماکرو در اکسل
شکل شماره 2 – تعیین رویداد یوزرفرم زمان اجرا

تشریح دستور اجرای اتوماتیک کد در اکسل

  • Application : اشاره به خود نرم افزار اکسل دارد.
  • OnTime : با این زیر کد می توان یک زمان معین برای یک رویداد را تعیین کرد.
  • Now : اشاره به زمان فعلی سیستم دارد.
  • TimeValue : با این کد می توان یک زمان را مستقیم تعریف کرد.
  • macro1 : نام ماکرویی هست که قبلا ایجاد کرده بودیم و ممکنه هر نامی به خودش بگیره.این قسمت باعث اجرای خودکار ماکرو میشه.

درواقع با کد بالا می گوییم که 3 ثانیه بعد از اینکه فرم WelcomeForm اجرا شد، کدهای داخل macro1 رو اجرا کن.حالا از اونجایی که داخل ماکرو1 کد Login_Form.Show رو نوشتیم پس یوزرفرم WelcomeForm بصور اتوماتیک اجرا و نمایش داده می شود.

اکنون از پنجره سمت چپ روی گزینه ThisWorkbook کلیک راست نموده و گزینه View Code رو بزنید تا صفحه کدنویسی باز بشه.حالا در رویداد Open کد زیر رو قرار بدید مانند شکل شماره 3 .

Private Sub Workbook_Open()
Application.Visible = False
WelcomeForm.Show
End Sub
کدنویسی مخفی کردن اکسل و نمایش یوزرفرم خوش آمدگویی
شکل شماره 3 – کدنویسی مخفی کردن اکسل و نمایش یوزرفرم خوش آمدگویی

از این به بعد وقتی شما فایلتون رو باز می کنید ابتدا فرم خوش آمدگویی (WelcomeForm) باز شده و بعد از مدت 3 ثانیه بصورت اتوماتیک بسته می شود و بعد یوزرفرم Login_Form نمایش داده می شود.اما مشکلی که اینجا وجود داره این هست که ممکنه کاربر خیلی سریع روی آیکون ضربدر فرم کلیک کنه و فرم رو زودتر از زمان 3 ثانیه ببنده که ما باید این مشکل رو حل کنیم.

برای اینکار روی WelcomeForm کلیک راست نموده و گزینه View Code رو بزنید تا صفحه کدنویسی باز بشه.حالا در رویداد QueryClose کد زیر رو قرار بدید مانند شکل شماره 4.

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = True
End Sub
غیرغعال کردن دکمه ضربدر یوزرفرم
شکل شماره 4 – غیرغعال کردن دکمه ضربدر یوزرفرم

این کد باعث میشه تا دکمه ضربدر قرمز برای بستن فرم غیرفعال بشه.



منبع : https://docs.microsoft.com

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

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

20 دیدگاه

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

  • سلام. وقتتون بخیر
    میخواستم بدونم چطور میشه یک شیت اکسل رو به عنوان شیت پیش فرض معرفی کرد که بعد از هر بار باز شدن، روی همون شیت باز بشیم؟!
    با تشکر

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

      در رویداد Open مربوط به ThisWorkbook برای مثال کد زیر را بنویسید:

      Sheet1.Select

  • سلام. میخواستم بپرسم چه طور میتونم یه کد جدید به اکسل اضافه کنم که یه عدد بگیره و اون رو داخل سلول آ6 بزاره و جواب سلول آ10 که بر اساس آ6 نوشته شده را برگردونه.
    ممنون میشم در صورتی که پاسخ رو میدونستین از طریق ایمیل هم به من خبر بدین. خیلی نیاز بهش دارم.
    ممنووووون

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

      باید از InputBox برای دریافت مقادیر و از MsgBox برای نمایش نتایج محاسبات استفاده کنید.

      البته اینکار از طریق UserForm هم قابل انجام می باشد.

  • سلام . من یه فایل اکسل درست کردم که بعد از باز شدن یه صورت اتومات فایل (application) بسته شده و یک یوزر فرم باز میشه . اما فراموش کردم که برای اون یوزر فرم برنامه بنویسم . حالا چجوری میتونم دوباره فایل اکسل رو باز کنم و به محیط برنامه نویسیش برم تا اون یوزر فرم رو اطلاح کنم . ممنون

  • استاد مختاری سلام
    سالن کنفرانسی را فرض کنید که برای رزرو جلسه در یک تاریخ خاص (1399/06/17) تنها از ساعت 08 صبح تا 16 ظهر قابل رزرو باشد و در بین ساعت های رزرو در تاریخ ذکر شده تکرار نباشد. مثلا اگر کسی از ساعت 12:00 تا 14:00 در تاریخ فوق رزرو کرد دیگری هم در این تاریخ نتواند در بین این ساعت رزرو انجام دهد البته قبل و بعدش بتونه اقدام کنه ( مثلا 08:00 تا 12:00) و یا بعدش 14:00 تا 16:00 ) . کد VBA ای که هم ستون تاریخ و هم ستون ساعت را بررسی کنه .

  • سلام
    برای اینکه هر کاربر فقط سطر مربوط به خود را تغییر دهید و بقیه را نتواند دستکاری کند، باید چه کار کرد؟
    از آموزش ها کدام فصل را مطالعه کنم به جواب برسم؟

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

      برای اینکار با کدنویسی باید سطح دسترسی برای کاربران ایجاد کنید.

  • سلام – من ماکرویی دارم در یک فایل اکسل که میخوام به محض باز شدن اکسل اجرا بشه- ماکرو چشمک زن برای دوتا سلول هست که اخطار میده- عین همین عمل رو که برای پیام خوش امد نوشتید رو انجام دادم ولی باز هم عملی نمیشه- حتما باید برم از بخش ماکروها run کنم وگرنه ماکرو فعال نمیشه- ممنون میشم راهنماییم کنید

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

      کد رو باید در رویداد Workbook_Open قرار بدید و فایل رو با فرمت ماکرو ذخیره کنید.

  • سلام خسته نباشید
    1- وقتی یوزر فرم را با ضربدر می بندم دفعه بعد ک فایل باز میشه مجددا وارد خود فایل اکسل میشه و باید فایل را ببندم دوباره باز کنم تا وارد صفحه یوزر فرم بشه. این مشکل را چطور میشه حل کرد؟
    در ضمن با یه botom هم و با دستور unload me باز وقتی یوزر فرم بسته میشه دفعه بعد مستقیم میره به شیت اکسل ولی اگر ببندم و مجددا باز کنم درست میشه
    2- وقتی queryclose را طبق دستور گفته شده cancel=true اجرا میکنم دکمه خروجی که بالا توضیح دادم و همچنین ضربدر بالا و همچنین یه دکمه برای ورود به اکسل گذاشتم دیگه کار نمیکنن
    ممنون میشم راهنمایی بکنید

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

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

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