プロが教えるわが家の防犯対策術!

いつもお世話になっております。
マクロのことで
2つ教えて頂きたく書き込みをさせて
いただきまいした。
よろしくお願いいたします。

ブックに何枚かシートがあり、
そのシートには全て同じマクロが入ってます。
このブックのシート全てを
マクロを削除し新しいブックにコピーをしたいです。
また、コピーをする際に
マクロがついているオブジェクト(ボタン)
もとってコピーをしたいです。

自力で調べたのですが
うまくわからずまた、こちらで質問
させていただきました。

よろしくお願いいたします

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

ありがとうございます!
うまくできました。

あとは教えて頂いた記述を理解していきたいと思います。
皆さんどうしてそんなに
わかるのでしょうか。

ありがとうございました。

お礼日時:2008/08/24 20:38

手動で削除する場合は2つの作業が必要になります。


(1)マクロを解放する
EXCELを立ち上げてALT+F11を押下するとVBE(マクロを作成するツール)が立ち上がります。
VBEの画面の左のほうに標準モジュールというものがあります。
標準モジュールのすぐ近くに小さな+があると思いますので、それを押下します。いろいろな名前のモジュール(もしかしたらModule1だけかもしれません)が表示されると思いますので、
それぞれのモジュールを選択して右クリック→解放を選択します。
保存するか聞かれると思いますが、いいえを選択します。
すべてのモジュールの解放が終わったら(2)に進みます。

(2)ボタンを削除する
それぞれのシートに貼ってあるボタンを選択し、Deleteキーを押下します。

上記作業が終わったら、上書きではなく別の名前で保存をしてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
うまく伝えられなかったのですが
tossy05様が教えてくださったことの
コードが知りたかったのです。

しかしとても勉強になりました。
ご回答ありがとうございます。

お礼日時:2008/08/24 19:44

マクロを消すマクロなんてのも考えられますが、エクセルのバージョンが上がってくると制約が厳しくなって難しい様です。


行番号と、列番号の交差する左上隅をクリックすると全セルが選択できますので、それをコピーして複写すると、当然ながらマクロは複写されません。但し、セル内に256文字以上の文字があると、切り捨てられてしまいます(XL2000の場合)
この方法でボタンを複写しないようにするには、ボタンに対して、「セルに合わせて移動やサイズ変更をしない」に設定しておくと良い様です。
マクロでやるなら、
Sub test
dim bk as workbook
   Set bk = Workbooks.Add
   Cells.Copy bk.Worksheets(1).Range("a1")
End Sub
といったところです。ご参考まで。
    • good
    • 0
この回答へのお礼

ありがとうございます。
私があまりにもマクロにつてわかっていない
ということが原因でもあるのですが
教えて頂いた記述をコピーしたところ
新しいブックができました。
教えて頂いた記述を
私が、必要な部分を書き換える
ということだったと思うのですが
あまりに無知でこれ以上できませんでした。

もう少し勉強していきたいです。
ありがとうございました。

お礼日時:2008/08/24 19:33

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A