• ベストアンサー

EXCEL2003VBA 「マクロでモジュール解放」

質問番号:5548045の関連質問です。 EXCEL2003VBA で、セキュリティ設定で『Visual Basic プロジェクトへのアクセス』にチェックを入れて、Module1に下記のように「モジュール解放」マクロを作成しましたが、Module1が削除されません。(1)を削除して、手動操作で変更を保存でファイルを閉じるとModule1も削除されます。 Module1の削除も全てマクロで行うやり方を教えてください。 With ThisWorkbook.VBProject.VBComponents .Remove .Item("Module1") .Remove .Item("Module2") .Remove .Item("Module3") End With ActiveWorkbook.SaveAs Filename:="D:\TEST" ActiveWorkbook.Close ・・・(1)

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

>自分のファイルは残して、シート部分のみ別ファイルにしたかったので それなら ThisWorkbook.Worksheets.Copy With ActiveWorkbook   .SaveCopyAs "D:\TEST.xls"   .Close False End With

pegasusv
質問者

お礼

再度の回答有難うございました。 ちゃんと動作しました。 たった4行で処理できるなんて、驚きました。 年末の忙しい時に回答頂き、有難うございます。 時々「教えて!goo」は、利用させて貰っています。 今年も宜しくお願いします。

その他の回答 (3)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

すみません   set oVBE as Application.VBE これは   set oVBE = Application.VBE の間違えです orz マクロの最後   ' 変更を反映   Workboos("Sample02.xls").Save End Sub の部分を   ' 変更を反映   Workbooks("Sample02.xls").Close True   ' Sample02.xlsがVBE上で残ってしまうため …   ActiveWorkbook.Save End Sub としたほうがいいようです

pegasusv
質問者

お礼

再度の回答有難うございました。 今度は、ちゃんと動きました。 年末の忙しい時に回答頂き、有難うございます。 時々「教えて!goo」は、利用させて貰っています。 今年も宜しくお願いします。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>EXCEL2003VBA で、セキュリティ・・・ EXCEL2003の環境が無いので確認できず別案 全シートを新ブックにコピーして元のブックと入れ替えれば Sub Test()   Dim myName As String   With ThisWorkbook     myName = .FullName     .SaveAs Filename:="J:\Tmp.xls"     .Saved = True     .ChangeFileAccess Mode:=xlReadOnly     .Worksheets.Copy     Application.DisplayAlerts = False     ActiveWorkbook.SaveAs myName     Application.DisplayAlerts = True     Kill "J:\Tmp.xls"     .Close False   End With End Sub

pegasusv
質問者

お礼

回答有難うございます。 実際に動かしてみましたが、自分のファイルのマクロが削除されてしまいました。やろうと思っていたのは、自分のファイルは残して、シート部分のみ別ファイルにしたかったので、保存するときにD:\TESTを指定してやれば良いですね。 Moduleを削除するのではなくて、シート部分を別ファイルにコピーする。考えてみれば、その方法が確かに簡単ですね。 どうも、有難うございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

自分自身を削除するのは無理かと思いますよ 最初に ActiveWorkbook.SaveCopyAs でマクロ抜きのブックを保存しておいてから 保存したブックを開き このブックを操作してマクロを抜いて もう一度変更を更新してみましょう Sub DeleteMacro   ' 変更後のマクロがわかるように変更   Application.VBE.VBProjects(1).Name = "Sample02"   ActiveWorkbook.SaveCopyAs "D:\Sample02.xls"   ' 元に戻す   Application.VBE.VBProjects(1).Name = "VBAProject"   ' マクロを削除するブックを開く   Workbooks.Open "D:\Sample02.xls"   dim oVBE as VBE, oProj as VBProject, oMod as VBComponent   dim n as Integer   set oVBE as Application.VBE   ' 変更するブックのプロジェクトを取得   set oProj = oVBE.VBProjects("Sample02")   With oProj     for n = .VBComponents.Count to 1 step -1       set oMod = .VBComponents(n)       ' 削除するモジュールの検査       if InStr( oMod.Name, "Module" ) then         .VBComponents.Remove oMod       end if     next   End With   ' 変更を反映   Workboos("Sample02.xls").Save End Sub といった具合で … ブックを開いたとき自動実行されるマクロなどがあって不具合があるなら ブック名などの違いを検出してマクロが起動しないようにしておきましょう

pegasusv
質問者

お礼

回答有難うございます。 上記マクロを動かしてみましたが、下記の部分で「構文エラー」が出ました。 set oVBE as Application.VBE エラーの原因が分かりませんので、教えて下さい。

関連するQ&A