• ベストアンサー
  • すぐに回答を!

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
  • 閲覧数873
  • ありがとう数5

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

  • ベストアンサー
  • 回答No.4

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • VBAでのマクロ削除

    複数のExcelファイルを読み込み必要なデータのみをsheet1に寄せ集め最後にExcel形式で保存するというコードを書きました。保存したExcelファイルは、次回同じVBAのコードからWorkbooks.Open Filenameで開く必要があるため、マクロを削除してから保存しないといけないことに気付きました。 ACompo = ExcelWorkbook1.VBProject.VBComponents.Item("module1") ExcelWorkbook1.VBProject.VBComponents.Remove (ACompo) 最終的にやりたいことは、3つのフォームと2つの標準モジュールを削除したい(ワークブックモジュールにもコード書いてありますのでそれも) ということになります。 よろしくお願いします。

  • excel VBA コピーファイルのマクロ削除

    下記3つの、プロシージャを組み合わせて、下記のやりたいことをやりたいのですが、うまくいきません。 どうかご教授の程よろしくお願いいたします。 excelは2000です。 ○やりたいこと 今現在開いているファイルの、コピーをデスクトップに保存して、その保存したブックのマクロ(標準モジュールと、コマンドボタン)を削除したい。 ○自分でやろうとすると コピーをデスクトップに保存すると、コピー元のファイルが勝手に閉じてしまい、コピー先のファイルのマクロを削除できない。 '■デスクトップにコピー保存 Sub copysave() Dim 場所 As String 場所 = CreateObject("WScript.Shell").SpecialFolders("Desktop") ActiveWorkbook.SaveAs Filename:=場所 & "\" & Format(Date, "yyyymmdd") & "○◆△.xls" End Sub '■標準モジュールの削除 Sub DelModule() Application.VBE.ActiveVBProject.VBComponents.Remove _   Application.VBE.ActiveVBProject.VBComponents("Module1") Application.VBE.ActiveVBProject.VBComponents.Remove _   Application.VBE.ActiveVBProject.VBComponents("Module2") End Sub '■CommandButtonの削除 Sub DelCommandButton() Dim c As Excel.OLEObject For Each c In Worksheets(1).OLEObjects   If TypeOf c.Object Is Msforms.CommandButton Then c.Delete End If Next End Sub

  • EXCEL2000VBA実践プログラミングリファレス「著者:大村あつし

    EXCEL2000VBA実践プログラミングリファレス「著者:大村あつし、栗山 恵吉、田中 博人、出版社エーアイ出版」のサンブルマクロが動かない。 マクロの初心者です。 私のパソコンはエクセル2007を利用しています。 サンプルマクロを動かす以前に、全てのサンプルに With ThisWorkbook.VBProject.VBComponents("Module1") に黄色のエラーが出てしまいます。 なぜかわかればご教示お願いします。 'コードを表示 Function GetCode(ByVal NowProc As String, ByVal NextProc As String) As String Dim myStartLine As Integer Dim myEndLine As Integer 黄色のエラー箇所⇒With ThisWorkbook.VBProject.VBComponents("Module1") myStartLine = .CodeModule.ProcBodyLine(NowProc, vbext_pk_Proc) If NextProc <> "" Then myEndLine = .CodeModule.ProcStartLine(NextProc, vbext_pk_Proc) Else myEndLine = .CodeModule.ProcCountLines(NowProc, vbext_pk_Proc) + myStartLine End If GetCode = .CodeModule.Lines(myStartLine, myEndLine - myStartLine) End With End Function

その他の回答 (3)

  • 回答No.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」は、利用させて貰っています。 今年も宜しくお願いします。

  • 回答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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.1
  • 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 エラーの原因が分かりませんので、教えて下さい。

関連するQ&A

  • 過去レス「マクロでモジュール解放を記述出来るか」

    '08.1.15のご質問No.3682185「マクロでモジュール解放を記述出来るか?」 のご回答が以下でした。 -------- まず Excelのマクロのセキュリティ設定で『信頼できる発行元』タブにある『Visual Basic プロジェクトへのアクセス』にチェックを入れておきます VBEで参照設定に『Microsoft Visual Basic for Application Extensibility 5.3』を追加します これでモジュールに対するアクセスができるようになります 実際のアクセス方法ですが Dim oVBE as VBE, oPrj as VBProject, oComp as VBComponent ' oCompがモジュールになります Set oVBE = Me.Application.VBE Set oPrj = oVBE.VBPrjects("VBAProject") for each oComp in oPrj.VBComponents   if oComp.Name = "開放したいモジュール名" then     oPrj.VBComponents.Remove oComp   end if next といった具合になります 【ここから質問です】 私のはエクセル2000ですが、上記をやると、 「コンパイルエラー:Meキーワードの使用方法が不正です」と出ます。 どこを直せば動くようになりますか?

  • VBAについて教えて頂けませんか?

    昨日から、エクセル2003を使ってVBAを、勉強している者です。 ネット上で調べながら、取合えず簡単なVBAを入れる事が出来ました、ですがエラーばかりで、どうしても先に行けず困っています。 ネット上で参考になる、VBAなどを見て思ったのですが エクセルのVisual Basicを開くと、左側に「Sheet1」とか「Module1」等があります。 参考になるVBAでは、「Sheet1」に書かれているのがあれば、「Module1」に書かれているのもあります。 VBAは「Sheet1」に、書き込まれるべきなのでしょうか?それとも 「Module1」に、書き込まれるべきなのでしょうか? 私の場合、例えば「1」「2」「3」と数字を打ってマクロの記録をして、Visual Basicを開くと、すべて「Module1」に書き込まれます。 すみませんが、教えて頂けませんか?

  • Mac版 マクロの完全削除方法

    マクロを削除してファイルを開いた後にも警告文が出ないようにしたいと思っています。 Windows版の完全削除の方法はよく見かけるのですが、 Mac版のエクセルですと 「Visual Basic Editor」の中の「Module1」を右クリックしても 「Module1 の解放」項目がありません。 「Module1 の削除」はあるのですが選択後「エクスポート」の確認が出て “保存”か“キャンセル”しか選択ができません。 保存の必要はないですし キャンセルすると何も変わらないのですが どなたかMac版でマクロの完全削除方法はご存知ないでしょうか。

  • エクセル・マクロのModuleについて教えください

    マクロでModule1 Module2を指定して開きたいのですがうまく 行きませんどのようにすればよいのかお教えください。

  • VBAでオブジェクト名に関する質問

    Excel2003を使っています。 例えば、 Sub Module1() ActiveWorkbook.Charts.PrintOut Copies:=1, Collate:=True End Sub というプログラムをVBAで作成します。このときオブジェクト名をModuleとして設定します。 すると、ツール⇒マクロで見られるマクロ名は xxxx.XLS!Module1 のようになります。 一方で、オブジェクト名をプログラム名と同じModule1にすると ツール⇒マクロで見られるマクロ名は xxxx.XLS!Module1.Module1 のようになります。 これって一体なぜなのでしょうか? 他のプログラムから他のプログラムを呼び出したいときに、 Module1と設定してしまうと xxxx.XLS!Module1.Module1のプログラムを呼び出すことは出来ません。 一体どういう利点があってこういう仕様になっているのでしょうか? また、オブジェクト名をプログラム名は別の名前にすべきなのでしょうか?

  • EXCEL2003の「マクロを含んでいます」の表示

    会社でEXCEL2003を使っています。 EXCELで毎月する作業があるのでマクロを組んでPersonal.exeに保存 しました。そうしたらその後作成して保存したExcelファイルは マクロを使っていなくても全部開く時に「セキュリティ警告/ ”(ファイル名)”はマクロを含んでいます」と出るようになって しまいました。 他の人から表示がでると面倒なのでVBAの画面で標準モジュールの中の MODULE1~を削除するよう言われてやっているのですが、マクロが 増えてきてこのMODULE1~をいちいち削除するのも大変でなりません。 新規ファイルを保存する時にこの標準モジュールの部分が保存されないようにする方法はありませんか?

  • モジュール内のマクロを全て実行させるには

    エクセルのModule1に100のマクロがあるとします。 この100のマクロを一括処理させる方法を教えてもらいたいのですが。 ようするに実行ボタンを100回押さなくて済む方法です。 また100のマクロ名を一つ一つ記入しなくて済む方法です。

  • excel2013 モジュールをVBAで書換えたい

    お世話になります。 現行使用しているモジュール内に記述されているファイル名をVBAで書き換えたいのです。 現状コーディング中に記述されているファイル名には、頭に年度を表わす、例えば 2014年なら下2桁の "14データ処理用" と書かれていて、年度が変わるたびに、 14を15の様にキーボードより編集しています。  しかしモジュールの中にファイル名の記述箇所が複数あり、またモジュールは複数あり その中にもその年のファイル名が記述されているために修正も一苦労しています。 そこでVBAのコードの記述を変換するためのフォームを作成し、西暦の下2桁を、前年、当年 それぞれ入力し、前年で検索して当年に置換するようにしたのですが、実行時エラー'13' で落ちてしまいます。 PCはゲストで使用しています。御存じのかたいらっしゃいましたらご教示願います。 以下VBAのコーディングです。宜しくお願いします。 Option Explicit Dim Target As Workbook, VBC, i As Long Private Sub CommandButton1_Click() Set Target = Workbooks(Sheet1) With Target.Workbooks(Sheet1).VBProject.VBComponents("Module1").CodeModule For i = 1 To .CountOfLines If .Lines(i, 1) = "" & In_Year & "データ" Then 'In_Year;前年 .ReplaceLine i, "" & Out_Year & "データ" 'Out_Year;当年 End If Next i End With Target.Save End Sub

  • Excel2003でマクロを組みました。

    Excel2003でマクロを組みました。 それなりにコードを書き込んだので、ファイルとしての容量が3MBくらいあります。 ためしにソース(Module1~35)を全て削除してみたら、2.2MBまで減りました。 (思ったより減らなかったですが) ファイル容量を減らしたいし、マクロを実行する側としてはソースはいらないので、 C言語のソースをコンパイルして実行ファイルだけを取り出して使うように、 (=プログラムの実行にはソースは必要無いように) Excelファイルからマクロの実行部分だけを抜き出す、 なんてことは可能でしょうか。 マクロとプログラムは違うから不可能でしょうか。

  • access2000 モジュールの削除について

    モジュール module1を削除しようとして、 モジュールの解放を行ったところ、 「ファイルへのアクセスでエラーが発生しました。 ネットワークへの接続が切断されている可能性があります」 と表示され、削除されません。 他のモジュールでmodule1の関数を使っていたためでしょうか? module1の内容は、別のファイルにコピーをとってあるので、 一度module1を削除して、あらたにmodule1を作成したいのですが、 (module1がつかえないと、他のモジュール内のmodule1とう文字をすべて書き換えないければ、ならない^^;) 上記のエラーがでてしまい、 自分では修復できません。 アドバイスお願いします。<(_ _)>