自己削除マクロ(Microsoft Excel)
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]
。