Самоудаление макросов (Microsoft Excel)
Патрик пишет макрос, и он хочет, чтобы макрос удалялся по истечении определенного срока. Есть несколько способов подойти к этой задаче. Во-первых, вы можете написать макрос, который будет работать только до определенной даты, следующим образом:
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 [Самоудаление макросов]
.