ページ

2012/06/05

[Excel][VBA]エクセルファイルからマクロを除去する


エクセル初回起動時にデータを読み込んでマクロで動的に表示を作成した後は
マクロをもう使わないので削除したいって時のための方法です。
マクロが残っていると起動時にセキュリティの警告が出たり、
利用者にマクロを見られるという問題を回避したい場合に使えます。

コピーとかでシートを移すとすべて移した段階で
何故かマクロも移るという現象が起こるので一枚シートを残してやる必要があります。
Sub CreateNoMacroBook()
    Dim fname As String
    Dim ns As Integer
    Dim cnt As Integer
    
    'マクロありブックの名前を取得
    fname = ActiveWorkbook.Name
    'マクロありブックのシート数を取得
    cnt = ActiveWorkbook.Worksheets.Count
    
    'すべてのシートをMoveするとエラーになるのでシートを追加
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    '新規ブック作成時のデフォルトのシート数を保管
    ns = Application.SheetsInNewWorkbook
    '新規ブック作成時のシート数を変更
    Application.SheetsInNewWorkbook = 1
    '新規ブック作成
    Workbooks.Add
    '新規ブック作成時のデフォルトのシート数に戻す
    Application.SheetsInNewWorkbook = ns
    
    'マクロありブックのシートを新規ブックの"Sheet1"シートの前に移動
    For i = 1 To cnt
        Workbooks(fname).Worksheets(1).Move Before:=Workbooks(Workbooks.Count).Worksheets("Sheet1")
    Next i
    '表示用に新規ブックの一枚目のシートをアクティブにする
    Workbooks(Workbooks.Count).Worksheets(1).Activate
    
    Application.DisplayAlerts = False
    '新規ブックのデフォルトシート"Sheet1"を削除する
    Workbooks(Workbooks.Count).Worksheets("Sheet1").Delete
    'マクロありブックを保存せずに終了
    Workbooks(fname).Close SaveChanges:=False
    Application.DisplayAlerts = True
    
End Sub
できる逆引き Excel VBAを極める 勝ちワザ700
2010/2007/2003/2002対応 (「できる逆引き」シリーズ)