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

このQ&Aのポイント
  • Excel VBA コピーファイルをデスクトップに保存し、マクロを削除する方法を教えてください。
  • コピーをデスクトップに保存すると、コピー元のファイルが閉じてしまい、コピー先のファイルのマクロを削除できません。どうすればマクロを削除できるでしょうか?
  • Excelのバージョンは2000です。
回答を見る
  • ベストアンサー

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

  • puyopa
  • お礼率87% (459/525)

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

オリジナルブックの標準モジュールに,次のマクロを登録してある。 #オリジナルブックの全シートを複製する #オリジナルブックの標準モジュールは置き去りにする #オリジナルブックの1枚目のシートにあるControlツールボックスを全て削除する  (そうでない場合は,ご質問に掲示されたマクロを流用する) sub macro1()  dim myPath as string  dim myFile as string  mypath = createobject("WScript.Shell").specialfolders("Desktop") & "\"  myfile = format(date, "yyyymmdd") & "xyz.xls"  thisworkbook.worksheets.copy  activeworkbook.worksheets(1).oleobjects.delete  activeworkbook.saveAs filename:=mypath & myfile end sub

puyopa
質問者

お礼

keithin様 完璧なお答えでした。 ありがとうございました。

関連するQ&A

  • VBAでのマクロ削除

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

  • 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)

  • 標準モジュールを削除したい。(VBA)

    VBAで、VBAの標準モジュールを削除したいのですが、なかなか出来ません。たぶん、コレクションについての認識があまいからだと思います。VBComponents コレクションのobject.Remove(component)のヘルプには、VBProjects コレクションには、スタンドアロン プロジェクトを指定します。とありますが、そもそもスタンドアロンプロジェクトって何ですか?Application.VBE.VBProjects(4).VBComponents(1).とするとコレクションでなくなってしまいますが、どうやってモジュールと特定するのでしょうか?どなたか詳しい方いらっしゃいましたらご指導願います。よろしくお願いいたします。 VBIDEのライブラリーです。

  • ExcelVBAでモジュールシートの内容更新を自動で行いたい

     Excelで、ファイルを開いたときに、そのファイルのモジュールシートの内容を自動的に更新するVBAを書きたいのです。  gooで質問しながらも、とりあえず自分で以下のように作ってみました。どのような方法にしたかというと、Auto_Openでファイルを開いたときに、まず対象となる更新前のモジュールシートを削除(更新前が存在しない場合はエラーになるのでOnErrorGotoで回避)し、その後、あらかじめ更新後の内容を記述しておいたC:\定義.txtというファイルを更新後のモジュールシートとして付け加えるというものです。  とりあえずはうまく内容更新できたのですが、ファイルを開いた際に自動的同時に開かれるBook1.xlsなどのファイルにも更新後のモジュールシートが付け加わってしまうのです。つまり、更新させたいファイルだけでなく、その他のファイルも更新の対象となってしまう場合があるのです。  いろいろ試してみると、すでにExcelを立ち上げた状態で当ファイルを開いた場合は、それ以前に開いていたファイルが更新対象になることはないようです。Excelを立ち上げていない状態からエクスプローラなどで当ファイルを開き、同時に自動的にExcelやBook1などのファイルも立ち上がる際に、Book1なども更新対象となってしまうようです。  更新させたいファイルのモジュールシートだけを更新するには、どのようにVBAを書いたらいいのか、ヒントくらいでも結構ですのでご教授ください。 Sub Auto_Open() 削除 追加 End Sub Sub 追加() With Application.VBE.ActiveVBProject.VBComponents.Add(vbext_ct_StdModule) .Name = "定義" .CodeModule.AddFromFile ("C:\定義.txt") End With End Sub Sub 削除() On Error goto trap Application.VBE.ActiveVBProject.VBComponents.Remove _ Application.VBE.ActiveVBProject.VBComponents("定義") Trap: End Sub

  • Excel VBA

    外部からモジュールを読み込めるようにしました。 ーーーーーーーーーーーーーーーーーーーーー Sub moduleImport_All() 'インポートしたいファイルのあるフォルダを指定 Dim sImportPath As String sImportPath = "C:\VBA\module\" 'FileSystemObjectの作成 Dim oFso As Object Set oFso = CreateObject("Scripting.FileSystemObject") 'フォルダオブジェクトを取得 Dim oDir As Object Set oDir = oFso.GetFolder(sImportPath) 'ファイル名を順次取得 Dim fFile As Object For Each fFile In oDir.Files 'ファイルの拡張子を取得 Dim sExt As String sExt = oFso.GetExtensionName(fFile.Name) '拡張子からモジュールだけを取得、インポート Select Case LCase(sExt) Case "bas", "cls", "frm" '指定のモジュールをインポート ThisWorkbook.VBProject.VBComponents.Import sImportPath & fFile.Name End Select Next MsgBox "完了" End Sub ーーーーーーーーーーーーーーーーーーーーー しかし、上書きがなされない為、1,2,3とモジュールが増えてしまいます。 読込みたいフォルダ内のファイルと同じ名前であれば全て上書きするにはどのように修正したらよいでしょうか?

  • VBA マクロを削除して保存したい

    お世話になります。 下記のコードでシートをコピーし、新規ブックに保存しています。 マクロを削除して保存するにはどのようにしたらよいでしょうか? コードはsheet5に記入しています。 ちなみにセルだけをコピペして、シートの設定もコピーできるコード もあるハズですよね? 書式、列の幅、行の高さ、ページ設定、をコピーしたいので、 どなたかご教授お願いします。 Private Sub 保存() Dim ns As Workbook Dim msg As String Sheets("sheet5").Copy Set ns = ActiveWorkbook msg = IIf(Application.Dialogs(xlDialogSaveAs).Show(ARG1:="" & ".xls", ARG2:=1), "保存", "キャンセル") ns.Close (False) Set ns = Nothing MsgBox msg & "しました。" End Sub

  • アクセスで標準モジュールの中身を書き出したい

    http://officetanaka.net/excel/vba/vbe/05.htm の Sub Sample9() Dim Code As String Code = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.Lines(7, 5) MsgBox Code End Sub のエクセルではなく アクセスバージョンはないでしょうか? http://d.hatena.ne.jp/taka_2/20090907/p2 をアクセスの標準モジュールに貼り付けてみたのですが inFileName = WScript.Arguments(0) で実行時エラー424になってしまいます。

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

    '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キーワードの使用方法が不正です」と出ます。 どこを直せば動くようになりますか?

  • エクセルマクロでフォルダのコピーがしたい

    こんにちわ 色々調べてフォルダのコピーはできたのですが、色々いじっていて分からないことが出てきたので質問に来ました。 やりたいことはフォルダをコピーしたいのですが、それぞれ名前を自動で変えようと思い下記(1)を元に下記(2)を作ってみましたが、動きませんでした。 (1)いくつかのサイトを見て動いたマクロ sub test() Dim myFSO As New FileSystemObject myFSO.CopyFolder "C:\test", "C:\test2" End Sub (2)ちょっといじって動かないマクロ sub test() Dim myFSO As New FileSystemObject Dim name As String Dim name2 As String name = "C:\test" name2 = "C:\test2" myFSO.CopyFolder "name", "name2" End Sub 「パスが見つかりません」と出てきたので、読み込んでいないのだとは思うのですが、どうしたら動くかアドバイスをいただきたいです。 よろしくお願いします。

  • 「エクセルファイルが開いていたら開かない」としたい

    「エクセルファイルが開いていたら開かない」としたいです。 VB2010です。 -------------------------------------------------------------- Imports Microsoft.Office.Interop '参照設定済み Module Module1 Sub ExcelOpen() Dim ExcApp As Excel.Application Dim book As Excel.Workbook Dim MyPath As String MyPath = "C:" ExcApp = CreateObject("Excel.Application") ExcApp.Visible = True book = ExcApp.Workbooks.Open(MyPath & "\test.xlsm") End Sub End Module -------------------------------------------------------------- で、ファイルを開くのですが、既にファイルが開いている場合は、2個開いてしまい、 最後に開いたファイルが読み取り専用になってしまいます。 IFで、開いているかどうかを取得して、 開いているのなら「既に開いています」として、ExitSubがしたいです。 ご協力よろしくお願いします。

専門家に質問してみよう