Geneは、マクロ内からマクロを削除する方法を求めました。彼は、マクロを使用してhttp://www.formville.com/C17_free-purchase-orders.html [注文書]をまとめる大きなワークシートを持っています。

最後のステップとして、マクロは、完成した注文書に不要になった元のデータを削除します。この簡素化されたワークブックは、新しい名前で保存されます。 Geneは、SelectionChangeイベントハンドラーに格納されているマクロを削除するために、保存する直前にマクロを必要とします。

これを処理する方法はいくつかあります。 1つの方法は、削除をすべて一緒に行う必要がないようにすることです。代わりに、マクロで新しいブックを作成してから、必要なデータのコピーをそのブックに転送してください。次に、新しいワークブックのデータをスライスしてダイシングし、注文書として保存できます。既存のブックのマクロがプロセス中に新しいブックにコピーされることはないため、マクロを削除することを心配する必要はありません。

現在のワークブックのすべてのワークシートを新しいワークブックにコピーするのは非常に簡単です。次のマクロは、それがどのように行われるかを示しています。

Sub CopyThisWorkbook()

Dim CopiedWB As String

CopiedWB = "Copy of " & ActiveWorkbook.Name

Sheets.Copy     ActiveWorkbook.SaveAs Filename:=CopiedWB, _       FileFormat:=xlNormal End Sub

CopyメソッドをSheetsコレクションに適用すると、アクティブなブック内のすべてのワークシートが新しいブックにコピーされ、新しいブックがアクティブになります。最後のコマンドは、新しいブックを新しい名前で保存します。

もちろん、マクロの一部を新しいブックに含める必要があるが、すべてではない場合(SelectionChangeイベントハンドラーなど)は、不要なものを削除して、新しいブックの下に保存するのがおそらく最善です。名前。次のマクロ例は、Sheet1のワークシートコードからSelectionChangeイベントハンドラーを削除する方法を示しています。

Sub DeleteProcedure()

Dim VBCodeMod As CodeModule     Dim StartLine As Long     Dim HowManyLines As Long

Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule     With VBCodeMod         StartLine = .ProcStartLine("Worksheet_SelectionChange", _           vbext_pk_Proc)

HowManyLines = .ProcCountLines("Worksheet_SelectionChange", _           vbext_pk_Proc)

.DeleteLines StartLine, HowManyLines     End With End Sub

マクロが完了すると、ブックが保存される可能性があり、目的のマクロは保存されたファイルに含まれません。このマクロは、Chip PearsonのWebサイトで提供されている情報を基に作成されています。この手法に関する追加情報が必要な場合は、この情報を参照してください。

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

注:

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

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

このヒント(3073)は、Microsoft Excel 97、2000、2002、および2003に適用されます。