Патрик пишет макрос, и он хочет, чтобы макрос удалялся по истечении определенного срока. Есть несколько способов подойти к этой задаче. Во-первых, вы можете написать макрос, который будет работать только до определенной даты, следующим образом:

Sub MyMacro()



ExpirationDate = #6/1/2013#     If Now() < ExpirationDate Then

'Rest of macro goes here

End if End Sub

Идея состоит в том, что если (в данном случае) текущая дата до 1 июня 2013 г., то будет выполнено основное тело макроса. Если это 1 июня или позже, макрос не будет выполняться. Этот подход, конечно, не удаляет макрос; он просто проверяет, выполняется ли макрос до определенной даты.

Чтобы действительно избавиться от кода макроса, вам нужно использовать другой подход:

Private Sub Workbook_Open()

Dim VBComp As VBIDE.VBComponent     Dim VBComps As VBIDE.VBComponents

'Delete if Past Date     If Date >= #6/1/2013# 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 июня 2013 г., то каждый компонент VBProject удаляется. Это означает, что макрос очень мощный, потому что он удаляет все, а не только одну процедуру или модуль.

Конечно, при использовании этого макроса нужно помнить о нескольких вещах.

Во-первых, если пользователь решит не включать макросы при открытии книги, этот код никогда не будет запускаться и макрос не будет удален.

Во-вторых, удаление макросов таким образом, очевидно, вносит изменения в книгу. Это означает, что при закрытии книги пользователя спросят, хотят ли они сохранить свои изменения. Если они решат не делать этого, то удаления не будут сохранены, и макрос снова запустится при следующем открытии книги.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (3123) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:

link: / excelribbon-Self-Deleting_Macros [Самоудаление макросов].