ایجاد سوال
dark_mode
0 دوستدار 0 امتیاز منفی
30 visibility
موضوع: آفیس توسط:

رایلی یک برگه دارد که باید هر جمعه با آن کار کند. این کاربرگ بر اساس یک الگو است و حداقل پنج سلول در محدوده C4:C8 وجود دارد که او باید پر کند. هنگامی که او با کاربرگ شروع می کند، این سلول ها خالی هستند. رایلی به این فکر می کند که آیا راهی برای جلوگیری از ذخیره و/یا بسته شدن کاربرگ تا زمانی که تمام این پنج خانه را پر کند وجود دارد.

راهی برای انجام این کار وجود دارد، اما شامل استفاده از ماکروها است. اکسل از مفهوم کنترل کننده رویداد پشتیبانی می کند، به این معنی که شما می توانید ماکروهایی را توسعه دهید که به صورت خودکار در هنگام وقوع رویدادهای خاص اجرا شوند. دو رویدادی که می‌توانید برای آن‌ها کنترل‌کننده‌های رویداد ویژه ایجاد کنید، BeforeClose (به معنی قبل از بسته شدن کتاب کار) و BeforeSave (قبل از ذخیره کتاب کار) هستند.

به عنوان مثالی از این که چگونه می تواند کار کند، اجازه دهید بگوییم که کاربرگ حاوی محدوده ای که باید بررسی شود (C4:C8) "MyData" نام دارد. می توانید این کد را به ماژول ThisWorkbook اضافه کنید:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim rng As Range
    Dim iCount As Integer
    Dim sTemp As String

    Set rng = Worksheets("MyData").Range("C4:C8")
    iCount = Application.WorksheetFunction.CountBlank(rng)
    If iCount <> 0 Then
        sTemp = rng.Address & " has blank cells. " & vbCrLf
        sTemp = sTemp & "The workbook will not be closed."
        MsgBox sTemp
        Cancel = True
    End If
End Sub

توجه داشته باشید که ماکرو برای تعیین اینکه آیا در محدوده سلول‌ها جای خالی وجود دارد یا خیر به تابع کاربرگ CountBlank متکی است. اگر هر چک خالی را تشخیص دهد (iCount بزرگتر از 0 است)، ماکرو پیامی را به کاربر نمایش می دهد و متغیر Cancel روی True تنظیم می شود که در واقع بسته شدن کتاب کار را متوقف می کند.

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

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim rng As Range
    Dim iCount As Integer
    Dim sTemp As String

    Set rng = Worksheets("MyData").Range("C4:C8")
    iCount = Application.WorksheetFunction.CountBlank(rng)
    If iCount <> 0 Then
        sTemp = rng.Address & " has blank cells. " & vbCrLf
        sTemp = sTemp & "The workbook will not be saved."
        MsgBox sTemp
        Cancel = True
    End If
End Sub

اگر می‌خواهید مطمئن شوید که روتین سلول‌هایی را انتخاب کرده است که در آنها ورودی مورد نیاز است (به عنوان مرحله آخر)، می‌توانید خط زیر را به هر دو ماکرو، درست بعد از خطی که متغیر Cancel را روی True تنظیم می‌کند، اضافه کنید:

        rng.Select

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

اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

looks_5نام شما برای نمایش - اختیاری
حریم شخصی : آدرس ایمیل شما محفوظ میماند و برای استفاده های تجاری و تبلیغاتی به کار نمی رود
عدد چهار رقمی در تصویر را وارد کنید

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

0 پاسخ وجود دارد

سوالات مشابه

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما
0 دوستدار 0 امتیاز منفی
0 پاسخ 26 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 40 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 26 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 35 visibility

24.3k سوال

9.6k پاسخ

614 دیدگاه

11.2k کاربر

235 نفر آنلاین
0 عضو و 235 مهمان در سایت حاضرند
بازدید امروز: 22131
بازدید دیروز: 17853
بازدید کل: 20334312
...