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

هنگامی که در حال توسعه یک کاربرگ هستید که توسط افراد دیگر استفاده می شود، ممکن است بخواهید مطمئن شوید که آنها سلول های خاصی را قبل از اینکه اجازه بستن کتاب کار را داشته باشند پر می کنند. هیچ تابع داخلی برای انجام این کار در اکسل وجود ندارد، اما می توانید یک ماکرو ایجاد کنید که بررسی لازم را انجام دهد و کاربر را برای ادامه کار متوقف کند. این می تواند یک ماکرو نسبتاً ساده باشد که به رویداد BeforeClose گره خورده است.

رویداد BeforeClose هر زمان که یک کتاب کار به هر وسیله ای بسته شود فعال می شود. ترفند، تنظیم ویژگی Cancel در کنترل کننده رویداد است. با تنظیم Cancel روی True بسته شدن کتاب کار متوقف می شود و بدون تغییر باقی می ماند و باعث بسته شدن نرمال کتاب کار می شود.

به عنوان مثال، ماکرو زیر بررسی می کند که آیا سلول A1 چیزی در آن وجود دارد یا خیر. اگر چنین شد، کتاب کار بسته می شود. اگر نشد، کاربر مطلع می شود که چیزی گم شده است و بسته شدن لغو می شود.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Cells(1, 1).Value = "" Then
        MsgBox "Please fill cell A1"
        Cancel = True
    End If
End Sub

در صورت تمایل می توان ماکروهای دقیق تری ایجاد کرد. به عنوان مثال، ممکن است چندین سلول مختلف داشته باشید که باید بررسی شوند. نسخه زیر محدوده ای به نام "اجباری" را بررسی می کند تا ببیند آیا هر سلول در محدوده حاوی چیزی است یا خیر. اگر هر یک از سلول ها خالی باشد، کتاب کار نمی تواند ذخیره یا بسته شود. (این ماکرو نه تنها در طول رویداد BeforeClose، بلکه در طول رویداد BeforeSave نیز فعال می شود.) این دو کنترل کننده رویداد باید در برگه کد کتاب کار قرار گیرند:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Cancel = ForceDataEntry()
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
  Cancel As Boolean)
    Cancel = ForceDataEntry()
End Sub

توجه داشته باشید که کنترل کننده رویداد تابع ForceDataEntry را فراخوانی می کند. این تابع باید در یک ماژول ماکرو معمولی قرار گیرد:

Function ForceDataEntry() As Boolean
    Dim rng As Range
    Dim c As Variant
    Dim rngCount As Integer
    Dim CellCount As Integer

    Set rng = Range("Mandatory")
    rngCount = rng.Count

    CellCount = 0
    For Each c In rng
        If Len(c) > 0 Then
            CellCount = CellCount + 1
        End If
    Next c
    ForceDataEntry = False
    If CellCount <> rngCount Then ForceDataEntry = True
End Function

باید توجه داشته باشید که هر پیاده سازی که به ماکرو نیاز دارد (مانند این مورد) از یک مشکل بالقوه رنج می برد - کاربران می توانند تصمیم بگیرند که وقتی کتاب کار بارگیری می شود ماکروها را فعال نکنند. اگر آنها کتاب کار را با ماکروهای غیرفعال اجرا کنند، همچنان می توانند کارنامه را بدون تمام سلول های اجباری حاوی مقادیر ذخیره کنند.

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

پاسخ شما

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

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

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

سوال مشابهی یافت نشد

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

23.2k سوال

8.5k پاسخ

613 دیدگاه

10.8k کاربر

239 نفر آنلاین
0 عضو و 239 مهمان در سایت حاضرند
بازدید امروز: 5806
بازدید دیروز: 13001
بازدید کل: 19460102
...