dポイントプレゼントキャンペーン実施中!

質問番号: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)

A 回答 (4件)

>自分のファイルは残して、シート部分のみ別ファイルにしたかったので


それなら
ThisWorkbook.Worksheets.Copy
With ActiveWorkbook
  .SaveCopyAs "D:\TEST.xls"
  .Close False
End With
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/01/02 00:04

すみません


  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
としたほうがいいようです
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/01/02 00:01

>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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/31 01:34

自分自身を削除するのは無理かと思いますよ



最初に 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

といった具合で …

ブックを開いたとき自動実行されるマクロなどがあって不具合があるなら
ブック名などの違いを検出してマクロが起動しないようにしておきましょう
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/31 01:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!