Patrickはマクロを作成しており、特定の有効期限に達した後にマクロが自分自身を削除することを望んでいます。このタスクに取り組むには、いくつかの方法があります。まず、次の方法で、特定の日付より前にのみ機能するマクロを作成できます。

Sub MyMacro()



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

'Rest of macro goes here

End if End Sub

(この場合)現在の日付が2013年6月1日より前の場合、マクロの本体が実行されるという考え方です。 6月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

このコードは、Chip Pearsonによって最初に作成されたマクロを元に作成されたもので、彼のサイトの次のアドレスで入手できます。

http://www.cpearson.com/excel/vbe.aspx

マクロを機能させるには、Microsoft Visual Basic for ApplicationsExtensibilityへの参照があることを確認する必要があります。 (これを行うには、VBエディターで[ツール] | [参照]を選択し、使用可能な参照で[Microsoft Visual Basic for Applications拡張性]を選択します。)

マクロはブックが開かれたときに実行され、日付が2013年6月1日以上の場合、VBProjectの各コンポーネントが削除されます。これは、単一のプロシージャやモジュールだけでなく、すべてを削除するため、マクロが非常に強力であることを意味します。

もちろん、このマクロで覚えておくべきことがいくつかあります。

まず、ユーザーがブックを開いたときにマクロを有効にしないことを選択した場合、このコードは実行されず、マクロは削除されません。

次に、この方法でマクロを削除すると、明らかにブックに変更が加えられます。つまり、ブックを閉じると、ユーザーは変更を保存するかどうかを尋ねられます。そうしないことを選択した場合、削除は保存されず、次にブックを開いたときにマクロが再度実行されます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(3123)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。

link:/ excelribbon-Self-Deleting_Macros [Self-DeletingMacros]