دیوید در یک کاربرگ باید محاسبه خودکار را هنگام باز شدن کاربرگ خاموش کند. سپس، او باید تعداد دفعاتی که کاربرگ را می توان محاسبه کرد (با استفاده از F9 ) به حداکثر 3 بار محدود کند.
این کار با استفاده از ماکروها بر اساس کتاب کار امکان پذیر است. تنها کاری که باید انجام دهید این است که ماکرو محاسبه خودکار را خاموش کند و سپس هر بار که محاسبه انجام می شود، کدی را اجرا کنید. با افزودن این خط به یک ماژول عمومی در کتاب کار شروع کنید:
Global iCalcCount As Integer
از آنجایی که این خط در یک رویه ظاهر نمی شود، متغیری را تعریف می کند که در سطح جهانی در دسترس خواهد بود. از آن برای نگه داشتن تعداد دفعاتی که محاسبه در کتاب کار انجام می شود استفاده می شود.
اکنون باید سه ماکرو (همه گردانندگان رویداد) را به ماژول ThisWorkbook اضافه کنید:
Private Sub Workbook_Open()
Application.Calculation = xlManual
Application.CalculateBeforeSave = False
End Sub
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
iCalcCount = iCalcCount + 1
If iCalcCount > 2 Then
Application.OnKey "{F9}", ""
MsgBox "You have already done 3 Calculations since opening." & _
vbCrLf & "{F9} is now disabled"
Exit Sub
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Calculation = xlAutomatic
Application.CalculateBeforeSave = True
Application.OnKey "{F9}"
End Sub
دو تا از این ماکروها هنگام باز شدن و بسته شدن کتاب کار فعال می شوند. در ماکرو Workbook_Open، دو خط کد، محاسبه خودکار را خاموش میکنند و همچنین محاسبهای را که معمولاً هنگام ذخیره کتاب کار انجام میشود، خاموش میکنند. (این امر ضروری است تا یکی از کاربرانی که "مجاز" را محاسبه کرده است، اشتباهاً در هنگام ذخیره کتاب کار انجام نگیرد.) این تنظیمات پیکربندی زمانی که کنترل کننده رویداد Workbook_BeforeClose اجرا می شود، لغو می شوند.
نیروی کار در این رویکرد، کنترل کننده رویداد Workbook_SheetCalculate است. هر زمان که کاربرگ مجدداً محاسبه شود، این به طور خودکار اجرا می شود. از آنجایی که محاسبه مجدد و محاسبه مجدد خودکار هنگام ذخیره خاموش شده است، به این معنی است که رویداد Workbook_SheetCalculate فقط زمانی رخ می دهد که کاربر کاری برای محاسبه اجباری انجام دهد، مانند فشار دادن F9 یا کلیک کردن روی ابزاری که دوباره محاسبه می کند. حتی اگر کاربر به صورت دستی محاسبه مجدد خودکار را روشن کند، رویداد Workbook_SheetCalculate همچنان فعال خواهد شد.
رویداد Workbook_SheetCalculate شمارنده iCalcCount را افزایش میدهد و اگر بزرگتر از 2 باشد، از روش OnKey برای غیرفعال کردن F9 استفاده میکند . البته، کاربر همچنان میتواند از یکی از ابزارهای داخلی برای محاسبه مجدد استفاده کند (مانند ابزار محاسبه در نوار وضعیت)، اما باز هم منجر به محاسبه مجدد کاربرگ نمیشود.