- ベストアンサー
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)
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>自分のファイルは残して、シート部分のみ別ファイルにしたかったので それなら ThisWorkbook.Worksheets.Copy With ActiveWorkbook .SaveCopyAs "D:\TEST.xls" .Close False End With
その他の回答 (3)
- redfox63
- ベストアンサー率71% (1325/1856)
すみません 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 としたほうがいいようです
お礼
再度の回答有難うございました。 今度は、ちゃんと動きました。 年末の忙しい時に回答頂き、有難うございます。 時々「教えて!goo」は、利用させて貰っています。 今年も宜しくお願いします。
- watabe007
- ベストアンサー率62% (476/760)
>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
お礼
回答有難うございます。 実際に動かしてみましたが、自分のファイルのマクロが削除されてしまいました。やろうと思っていたのは、自分のファイルは残して、シート部分のみ別ファイルにしたかったので、保存するときにD:\TESTを指定してやれば良いですね。 Moduleを削除するのではなくて、シート部分を別ファイルにコピーする。考えてみれば、その方法が確かに簡単ですね。 どうも、有難うございました。
- redfox63
- ベストアンサー率71% (1325/1856)
自分自身を削除するのは無理かと思いますよ 最初に 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 といった具合で … ブックを開いたとき自動実行されるマクロなどがあって不具合があるなら ブック名などの違いを検出してマクロが起動しないようにしておきましょう
お礼
回答有難うございます。 上記マクロを動かしてみましたが、下記の部分で「構文エラー」が出ました。 set oVBE as Application.VBE エラーの原因が分かりませんので、教えて下さい。
お礼
再度の回答有難うございました。 ちゃんと動作しました。 たった4行で処理できるなんて、驚きました。 年末の忙しい時に回答頂き、有難うございます。 時々「教えて!goo」は、利用させて貰っています。 今年も宜しくお願いします。