پاتریک در حال نوشتن یک ماکرو است و می خواهد پس از رسیدن به تاریخ انقضا، ماکرو خودش را حذف کند. چند راه وجود دارد که می توان به این کار نزدیک شد. ابتدا، می توانید یک ماکرو بنویسید که فقط قبل از یک تاریخ خاص عمل کند، به روش زیر:
Sub MyMacro()
ExpirationDate = #1/1/2020#
If Now() < ExpirationDate Then
Rest of macro goes here
End if
End Sub
ایده این است که اگر (در این مورد) تاریخ فعلی قبل از 1 ژانویه 2020 باشد، بدنه اصلی ماکرو اجرا خواهد شد. اگر 1 ژانویه یا بعد از آن باشد، ماکرو اجرا نمی شود. این رویکرد، البته، در واقع ماکرو را حذف نمی کند. به سادگی بررسی می کند که ماکرو قبل از یک تاریخ خاص اجرا شده است.
برای خلاص شدن از شر کد ماکرو، باید رویکرد متفاوتی را در پیش بگیرید:
Private Sub Workbook_Open()
Dim VBComp As VBIDE.VBComponent
Dim VBComps As VBIDE.VBComponents
Delete if Past Date
If Date >= #1/1/2020# Then
Set VBComps = ActiveWorkbook.VBProject.VBComponents
For Each VBComp In VBComps
Select Case VBComp.Type
Case vbext_ct_StdModule, vbext_ct_MSForm, _
vbext_ct_ClassModule
VBComps.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next VBComp
End If
Set VBComps = Nothing
Set VBComp = Nothing
End Sub
این کد از یک ماکرو که در اصل توسط چیپ پیرسون نوشته شده بود، اقتباس شده است که در سایت او در آدرس زیر موجود است:
http://www.cpearson.com/excel/vbe.aspx
برای اینکه ماکرو کار کند، باید مطمئن شوید که مرجعی به Microsoft Visual Basic برای توسعه برنامه ها وجود دارد. (این کار را با انتخاب، در ویرایشگر VB، Tools | References و سپس انتخاب Microsoft Visual Basic for Applications Extensibility در مراجع موجود انجام می دهید.)
ماکرو زمانی اجرا می شود که ورک بوک باز می شود و اگر تاریخ بزرگ تر یا مساوی با 1 ژانویه 2020 باشد، هر جزء از VBProject حذف می شود. این بدان معنی است که ماکرو بسیار قدرتمند است، زیرا همه چیز را حذف می کند، نه فقط یک رویه یا ماژول واحد.
البته در مورد این ماکرو باید چند نکته را در نظر داشت. ابتدا، اگر کاربر انتخاب کند که هنگام باز شدن ورک بوک، ماکروها را فعال نکند، این کد هرگز اجرا نخواهد شد و ماکرو حذف نخواهد شد. دوم، حذف ماکروها به این روش به وضوح تغییراتی را در ورک بوک ایجاد می کند. به این معنی که وقتی ورک بوک بسته می شود، از کاربر پرسیده می شود که آیا می خواهد تغییرات خود را ذخیره کند یا خیر. اگر آنها این کار را انتخاب کنند، حذف ها ذخیره نمی شوند و دفعه بعد که ورک بوک باز می شود، ماکرو دوباره اجرا می شود.