رویدادها در اکسل
رویدادها در اکسل به چه چیز گفته میشود؟
یکی از مهمترین نکاتی که در مورد اجرای کدهای نوشته شده در وی بی باید مورد توجه قرار بگیره، زمان اجرای کد است. یکی از اهداف استفاده از VBA در اکسل افزایش سرعت ما در کار با اکسل هست، از این رو این امکان فراهم شده که کدهایی که نوشته شده به صورت خودکار در زمان های خاص اجرا بشه و نیاز به اجرای دستی اون نباشه. این کار با مفهوم رویدادها در اکسل امکان پذیر است.
در اکسل مفهومی به نام رویداد وجود داره که به زمان اجرای برخی فعالیت ها گفته میشه. به عنوان مثال اگر کاربر یک شیت رو انتخاب کنه یک رویداد (که اسم خاص خودش رو داره) رخ داده. همچنین ورود اطلاعات در سلول یا ذخیره کردن فایل هم یک رویداد هستند که از نظر اکسل اگر رخ بده قابل تشخیص هست. اینکه این رویدادها در اکسل قابل تشخیص هستند یعنی اینکه میشه زمان اجرای کدهایی که نوشتیم رو به این رویدادها وابسته کرد.
به عنوان مثال اگر میخوایم در زمان انتخاب هر یک از شیت ها، کدی اجرا شود، این کار با نوشتن کدی که وابسته به رویداد “انتخاب شدن شیت ها” هست انجام میشه. همچنین اگر بخوایم ماکرویی که نوشته شده در زمان انتخاب Sheet1 اجرا بشه، باید این کد رو به رویداد Activate مربوط به Sheet1 وابسته کنیم.
اشیاء در اکسل (مثل شیت ها، نمودارها، فایل ها و یا حتی خود برنامه اکسل) دارای رویدادهای خاص خود هستند.
چگونه کدهای وی بی رو به رویدادها وابسته کنیم؟
سوالی که پیش میاد اینه که چطوری کدهایی که نوشته ایم رو به رویدادها وصل کنیم. بعد از ورود به ویرایشگر VBA (ترکیب دکمه های Alt+F11 یکی از اون راه ها هست) باید پنجره کد مربوط به اون شئ که میخوایم به رویدادهای اون وصل بشیم رو باز کنیم. به عنوان مثال اگر بخوایم کد ما در زمان انتخاب شدن Sheet1 اجرا بشه، باید از قسمت Projects Window پنجر کد Sheet1 رو باز کنیم. در شکل 1 صفحه کد مربوط به Sheet1 انتخاب شده
شکل 1- انتخاب پنجره کد برای اتصال کد به رویدادها در اکسل
بعد از وارد شدن به پنجره کد شئ مورد نظر از لیست بالا سمت چپ (در شکل 1 قسمتی که کلمه General نوشته شده) شئ مورد نظری که با رویدادهای آن کار داریم رو انتخاب میکنیم (در اینجا گزینه Worksheet رو انتخاب میکنیم). بعد از انتخاب شئ مورد نظر در لیست سمت راست آن، رویدادهای قابل انتخاب نمایش داده میشه.
شکل 2- رویدادها در اکسل- انتخاب رویداد مورد نظر
بعد از انتخاب رویداد مورد نظر از لیست، در پنجره کد یک SUB ایجاد خواهد شد. در این ساب هر کدی که بنویسید در زمان رخداد رویداد مورد نظر اجرا میشه. توجه کنید نباید آرگومان ها و یا نام ساب رو تغییر بدید.
مثال: نمایش پیغام در زمان انتخاب سلول B1
برای انجام این کار باید از بین رویدادهای شیت، رویداد SelectionChange رو انتخاب کنید. این رویداد زمانی رخ میده که سلول دیگری به جز سلول فعال، انتخاب بشه. با انتخاب این رویداد، ساب Worksheet_SelectionChange به پنجره کد اضافه میشه. حالا کافیه کدهای وی بی رو که برای بررسی سلول انتخاب شده و نمایش پیغام در این ساب گذاشته بشه.
این ساب یک آرگومان به نام Target داره که نماینده سلول یا محدوده انتخاب شده هست. پس در واقع با بررسی خصوصیات این شئ (Target) میتونیم بفهمیم که چند سلول انتخاب شده و یا آدرس سلول انتخاب شده چیه. کد زیر برای بررسی شماره ردیف و ستون سلول انتخاب شده و اینکه فقط یک سلول انتخاب شده باشه نه چند تا سلول:
1 2 3 4 5 6 7 |
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' بررسی اینکه تنها یک سلول انتخاب شده و آن هم سلول مورد نظر باشه If Target.Count = 1 And Target.Row = 1 And Target.Column = 2 Then ' در صورتیکه سلول مورد نظر انتخاب شده باشه، پیغام نمایش داده بشه MsgBox "شما سلول مورد نظر ما رو انتخاب کردید" End If End Sub |
6 نظر
با سلام
وقتی میخوام با دستور save as یک فایل رو بر روی فایل قبلی ذخیره کنم یک پیغام میاد که میخواید روی فایل قبلی ذخیره کنید…
واسه اینکه بصورت خودکار ذخیره کنه باید چه کدی زد؟
و اینکه کلا برای انتخاب خودکار از بین گزینه هایی که طی اجرای ماکرو ممکنه بصورت کادر محاوره ظاهر بشن، از چه کدی میشه استفاده کرد؟
با سپاس
سلام، وقت بخیر
از کد زیر قبل از اجرای کدتون استفاده کنید:
دقت کنید که انتهای کدتون این گزینه رو True کنید.
باسلام
آیا میتوان رویدادی را در یک شیت تعیین کرد و در کدهایی که نوشته ایم از آدرس سایر شیتها نیز استفاده کرد.
به عنوان مثال در شیت 1 بنده رویدادی را مد نظر قرار داده ام ولی میخواهم با انجام رویداد در شیت 1 مواردی در سایر شیتها تغییر کند.
ممنون میشم اگر کمک کنید
باتشکر
سلام،
بله اگر آدرس سلول یا آبجکت هایی که در سایر شیت ها هست رو همراه با نام شیت بیارید میتونید این کار رو انجام بدید.
سلام.خسته نباشید
من احتیاج دارم که طبق اولویت هایی که به به هر سطرم میدم اونها به طور خودکار از اولویت 1 تا 5 مرتب بشن
مثلا یک داده جدید در آخرین سطرم(سطر 100) وارد کردم با اولویت 2 میخام که این سطر به طور خودکار به بالا منتقل بشه و زیر آخرین اولویت 2 که قبلا وارد کردم بشینه
ممنون میشم راهنماییم کنین
درود بر شما
باید سورت کنید
اگر به فرمول نویسی مسلط هستید باید از small/rage استفاده کنید و البته با توابع دیگه ترکیب کنید که کل سطر و جابجا کنه
در غیر اینصورت میتونید سورت کنید و برای اتومات شدنش، ماکرو ضبط کنید