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

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 удаляется. Это означает, что макрос очень мощный, потому что он удаляет все, а не только одну процедуру или модуль.

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

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

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

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

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

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

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

Этот совет (12812) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

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