- ベストアンサー
マクロ ブックをマクロなしでコピー
いつもお世話になっております。 マクロのことで 2つ教えて頂きたく書き込みをさせて いただきまいした。 よろしくお願いいたします。 ブックに何枚かシートがあり、 そのシートには全て同じマクロが入ってます。 このブックのシート全てを マクロを削除し新しいブックにコピーをしたいです。 また、コピーをする際に マクロがついているオブジェクト(ボタン) もとってコピーをしたいです。 自力で調べたのですが うまくわからずまた、こちらで質問 させていただきました。 よろしくお願いいたします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 基本的には、#1さんのマクロでよいはずです。 マクロでマクロコードを操作するのは、ウィルスライクになるので、それは、掲示板で、あまり書くのは好ましくありません。 以下のコードを、標準モジュールに以下を入れてください。 使い方は、マクロを実行すれば、新しいブックにマクロなしで、コピーされます。 一つないし、複数のシート(作業グループ)を選択したものをコピーしたい場合は、以下の行頭の(')コメントブロックを外します。 'Set sWh = ActiveWorkbook.Worksheets ''選んでコピー Set sWh = ActiveWindow.SelectedSheets ただし、以下の現在のマクロは、ワークシート以外のグラフシートは、コピーできません。多少、以下のマクロには、いろんなシートの形態が混じると、問題が出てくるとは思いますが、通常の使用ならトラブルはないと思います。 --------------------------------------------- Sub SheetsCopy() Dim i As Integer Dim j As Integer Dim sh As Object Dim sWh As Sheets Dim msg As String 'すべてコピー Set sWh = ActiveWorkbook.Worksheets ''選んでコピー 'Set sWh = ActiveWindow.SelectedSheets With Workbooks.Add If i > .Worksheets.Count Then .Worksheets.Add After:=.Worksheets(.Worksheets.Count), _ Count:=i - .Worksheets.Count End If j = 1 For Each sh In sWh If TypeName(sh) = "Worksheet" Then sh.Cells.Copy .Sheets(j).Cells(1, 1) Else msg = msg & "," & sh.Name End If j = j + 1 Next sh End With If Len(msg) > 2 Then MsgBox Mid(msg, 2) & " は現在のマクロではコピーできません。", 64 End If End Sub
その他の回答 (2)
- tossy005
- ベストアンサー率38% (7/18)
手動で削除する場合は2つの作業が必要になります。 (1)マクロを解放する EXCELを立ち上げてALT+F11を押下するとVBE(マクロを作成するツール)が立ち上がります。 VBEの画面の左のほうに標準モジュールというものがあります。 標準モジュールのすぐ近くに小さな+があると思いますので、それを押下します。いろいろな名前のモジュール(もしかしたらModule1だけかもしれません)が表示されると思いますので、 それぞれのモジュールを選択して右クリック→解放を選択します。 保存するか聞かれると思いますが、いいえを選択します。 すべてのモジュールの解放が終わったら(2)に進みます。 (2)ボタンを削除する それぞれのシートに貼ってあるボタンを選択し、Deleteキーを押下します。 上記作業が終わったら、上書きではなく別の名前で保存をしてください。
お礼
ありがとうございます。 うまく伝えられなかったのですが tossy05様が教えてくださったことの コードが知りたかったのです。 しかしとても勉強になりました。 ご回答ありがとうございます。
- mitarashi
- ベストアンサー率59% (574/965)
マクロを消すマクロなんてのも考えられますが、エクセルのバージョンが上がってくると制約が厳しくなって難しい様です。 行番号と、列番号の交差する左上隅をクリックすると全セルが選択できますので、それをコピーして複写すると、当然ながらマクロは複写されません。但し、セル内に256文字以上の文字があると、切り捨てられてしまいます(XL2000の場合) この方法でボタンを複写しないようにするには、ボタンに対して、「セルに合わせて移動やサイズ変更をしない」に設定しておくと良い様です。 マクロでやるなら、 Sub test dim bk as workbook Set bk = Workbooks.Add Cells.Copy bk.Worksheets(1).Range("a1") End Sub といったところです。ご参考まで。
お礼
ありがとうございます。 私があまりにもマクロにつてわかっていない ということが原因でもあるのですが 教えて頂いた記述をコピーしたところ 新しいブックができました。 教えて頂いた記述を 私が、必要な部分を書き換える ということだったと思うのですが あまりに無知でこれ以上できませんでした。 もう少し勉強していきたいです。 ありがとうございました。
お礼
ありがとうございます! うまくできました。 あとは教えて頂いた記述を理解していきたいと思います。 皆さんどうしてそんなに わかるのでしょうか。 ありがとうございました。