• ベストアンサー

(Excel VBA)シートコピー時マクロはコピーしたくない

教えていただけますでしょうか? マクロでシートをコピーしています。 しかし、コピー元にマクロ記述があるのですが(これは消さない)、 シートをコピーした後このマクロ記述まで一緒にくっついてきます。 ・あるシートのマクロ記述を消すには、どうマクロを組めばよいか? よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。Wendy02です。 >まず新規ブックにシートをコピーしてブック内でコピー→値貼り付けという流れになっています。そうするとどうしてもマクロまで持ってきちゃうんですよね……。 それは、ありえないと思いますね。 >→標準モジュール自体ありませんし、 > シートのモジュールもThisWorkBookにも一行も存在しません。 > なぜでしょうか? もし、本当に、プロジェクト・エクスプローラのすべてのVBE を開いても分からないというなら、コンパイル型マクロのウィルス感染しかありません。 ただ、セキュリティの警告が出たときに、そのメッセージの内容をチェックしてください。必要ならメモをしてもよいです。(ちゃんと出てきてはいませんが、ある程度は分かります) 最初に、セキュリティ警告ダイアログで、 --------------------------------------------- "C:\.................."  ←ここを良くみてほしいです。 (省略されていますが、なんとか分かるはずです) 以下の発行者によるマクロが含まれています。 (ないばあいもある) --------------------------------------------- とか出てきます。 次に、セキュリティの「信頼出来る発行元[タブ]」の部分で、 少なくとも、 組み込み済みのアドインテンプレートをすべて信頼する にはチェックが入っているのでしょうか? 他にも、まだあります。私は、あまりこういう質問は得意でないというか、あれもこれも、と考えてしまうので、一般の回答者さんのように、「キメウチ」的に回答することが出来ません。もともと、セキュリティのオプション自体が、極論的には、一般のVBAプログラマ(CA認証を持たない製作者)が不要だという発想にあるものだと思っていますので、一旦は解決したと思っても、次期バージョンでは別の設定が発生したりします。なお、「低」でも、ウィルス感染自体は、アンチウィルスがあれば、本来は関係ありません。アドイン・プログラムの種類によっては、MS自身が「低」を勧めていたりするのですから、いかに、その設定は「不毛」なのか分かります。単に、マクロが入っています、程度のものしかないのです。 なお、#2のコードの Worksheets("Sheet1").Range("A1").PasteSpecial (xlPasteValues)    ↓ Worksheets("Sheet1").Range("A1").PasteSpecial に変えていただければ、データ全部をコピーします。 シートのローカルマクロまでは、オブジェクトの単位が違いますので、コピーはされません。

motsu2006
質問者

お礼

御礼が遅くなりまして、申し訳ありませんでした。 何度もご回答いただき、本当にありがとうございました。 Wendy02さんのご回答は、いつも丁寧で適切で助かっています。 さて、 >→標準モジュール自体ありませんし、 > シートのモジュールもThisWorkBookにも一行も存在しません。 > なぜでしょうか? ↑は解決しました。参考までに書きますと、 VBAでVBAのコードを削除した後、一度コンパイルまたは上書き保存すれば"マクロの無効・有効"を聞いてくることはなくなりました。 そりゃそうですよね……。 今回はとても助かりました、感謝します。 また質問することがあると思いますが、見かけたらまたよろしくお願いしますね!

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。Wendy02です。 そのおっしゃっていたサイトのコードは、あまり参考にする内容でもないかもしれませんね。独特な書き方ですから。 >しかも、生成されたブックにマクロ記述は1行もないのに起動時にマクロの有効・無効を聞いてきます(なぜでしょう?)。 『標準モジュール』があれば、それだけで、マクロがあると言ってきます。それを開放していただかなくてはなりません。 本来は、MS-Office のセキュリティの問題も書かなくてはならないのですが、そのセキュリティというのは、実際に、ウィルス自体を防げればよいのですが、それは無理です。単に、マクロを働かせたくない人のオプションでしかありません。最終的には、一般ユーザーから、事実上、VBAを取り上げる気のような気がします。 それはともかくとして、 >あるブックのシートをコピーして"値だけ貼り付け"をしたい、です オーソドックスな書き方をすると、このようになりますね。 ActiveWorkbook.Worksheets("Sheet1").Cells.Copy Workbooks("TestBook.xls").Activate Worksheets("Sheet1").Range("A1").PasteSpecial (xlPasteValues) 'ブック名は任意

motsu2006
質問者

お礼

再度のご回答、ありがとうございます。 大変参考になりました! しかし、 >『標準モジュール』があれば、それだけで、マクロがあると言ってきます。 →標準モジュール自体ありませんし、  シートのモジュールもThisWorkBookにも一行も存在しません。  なぜでしょうか? あと、完全に私の質問が浅かった(不足していた)のですが、 書式も含めての値コピーがしたかったわけです。 よって、まず新規ブックにシートをコピーしてブック内でコピー→値貼り付けという流れになっています。そうするとどうしてもマクロまで持ってきちゃうんですよね……。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 >・あるシートのマクロ記述を消すには、どうマクロを組めばよいか? Excel2002以上のバージョンでは、VBE に直接アクセスするのは、ウィルスもどきの行為として、禁止されておりますので、設定によって、禁止のメッセージが出てくるはずです。 どのようなマクロかは分かりませんが、 ActiveWorkbook.Worksheets("Sheet1").Cells.Copy _  Workbooks("TestBook.xls").Worksheets("Sheet1").Range("A1") 'ブック名は任意 として、シートの表面を取得して、別のブックのシートに貼り付ければ、付随するコードはコピーはされません。

motsu2006
質問者

お礼

いつもご回答ありがとうございます。 実は質問しながら自分でもいろいろ探してみたのですが、 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_200.htmlのサイトの "マクロを除いた配布用ブックを作成する。"を参考に組んでみました。 ところが、Wendy02さんもおっしゃられている通りに プロファイルごとにセキュリティの設定を変更しなければならないようです。 しかも、生成されたブックにマクロ記述は1行もないのに 起動時にマクロの有効・無効を聞いてきます(なぜでしょう?)。 また、そもそものやりたいことは あるブックのシートをコピーして"値だけ貼り付け"をしたい、です。

関連するQ&A

  • エクセル・シートコピーの際のマクロについて

    教えてください。 エクセルで、マクロを組んでいる月毎の勤務表を1つのシートとし、月が替わるたびにシートコピーをし増やしていきましたら、1つのファイル内にシートが多くなった為に、ファイル動作(保存等)が遅くなりました。 そこで、ファイルのコピーをし、別ファイルで管理し、再度、同じように作業していこうかと思っております。 しかし、ファイルのコピーをし、そのファイル内のマクロを実行しましたら、何故か、コピー元のファイルも一緒に開いてしまいます。マクロ情報がコピー元にあるからかと思いますが、このマクロ実行時にファイルが開かないようにする方法はありますか? よろしくお願い致します

  • EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?

    VBAのマクロでシートのコピーをしたいのですが、元のシートにはVBAのコードが含まれています。コピーするのはデータだけのコピーが必要で、マクロ自体は必要ないのですが、それを削除するコードはどのように書いたらいいのでしょうか? どうしてもコピーしたファイルを開くと「マクロが含まれています」という確認メッセージが出てしまうのですが、それもなくしたいのです。 シートにフォームのボタンが配置されている場合も同様に、そのボタン自体をなくした状態でコピーを行いたいのですが・・・。プログラムで行うのは不可能なのでしょうか?

  • Excel2007VBAシートコピーとマクロ保存

    ●質問の主旨 複数のシートのファイルにおいて最終シートだけをコピーし、 かつそのファイルの標準モジュールも含んだファイルを保存するには、 下記のコードをどのように書き換えたらいいでしょうか? ご存知のかたご教示願います。 ●コード Sub 保存() Dim flname As String flname = "D:\医療週報\VBA試作\" & Format(Date, "yyyy年mm月") & ".xlsx" ActiveSheet.Copy ActiveWorkbook.SaveAs flname ActiveWorkbook.Close End Sub ●質問の補足 1)マクロで「保存」を実行するときは手作業で必ず最終ページを開いています(アクティブにします)。 2)上記コードのうち".xlsx"では最終シートだけをコピーできますが、 マクロの保存ができません。また".xlsm"にするとエラーが出ます。 ".xls"にすると複数のシートが全てコピーされた上に、マクロの保存ができていません。 3)私はVBA初心者です。

  • シートをコピーするマクロ

    エクセルファイルを二つ開いているとします。 現在のアクティブシートを、もうひとつのファイルの最後のシートの後ろにコピーするマクロを教えてもらいたいのですが。 もうひとつのファイル名はそのつど変えることなく、汎用性がもてれば助かります。 以上、よろしくお願いいたします。

  • Excel2003今のシートをコピーするマクロ

    今、開いているシートを「複製」という名称でコピーするマクロを書きたいのですが、どのように書けばできますか?

  • EXCEL;VBAマクロ:シート名変更

    アクティブシートの現在ついている名前をマクロの中で使用せずに、シート名をABCとかに変更するにはどのようにマクロ記述すればいいか。

  • シートをコピーするマクロ

    コピー先に関しては、例えば先頭から3つ目のシートの後からということなら、以下のように指定できると思います。 after:=Workbooks(Book1).Sheets(3) 同様の指定をコピー元にもすることができるでしょうか。 例えば、先頭から3つ目のシートから5つのシートをコピー対象とする、という指定は可能でしょうか?

  • 【Excel VBA】シートコピー時、マクロコードはコピーしたくない

    ws.copy Before:=Workbooks(File).Sheets(1) Windows(File).Activate Cells.Select Selection.copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 上記コードで、シートのコピー・貼付を行っていますが、 コピー元シートのコードも引き継がれてしまいます。 引き継がれないようにコピーしたいのですが、可能でしょうか? 可不可について、 可能ならばそのやり方(コード)を教えていただけないでしょうか? よろしくお願いします。

  • VBAでマクロを消すコマンドがありますか

    Sheet1に「コピー」ボタンを置き、クリックすると"Sheet1"のコピー"Sheet1 (2)"を作成するマクロを作成しました。 このあと、"Sheet1 (2)"にコピーされた全てのボタンとマクロを削除したいのですが、 ボタンの削除はうまくできましたがマクロが残ってしまいます。 これをやる目的は、Sheet1でいろいろ編集した帳票をReadOnlyの保存版を作って残したいということです。 ボタンが無くなるので"Sheet1 (2)"のマクロは使えなくなり、目的は達成しているのですが、できればごみとなった"Sheet1 (2)"のマクロを消したいのです。 VBAの記述内でマクロを消去することはできるのでしょうか。

  • VBAでsheetのコピー

    初めまして、宜しくお願い致します。環境:WindowsXPSP3EXCEL2010やりたい事Book1に複数の名前の付いたsheetがあります。sheetの数は可変です。このBook1のsheetをVBAから新に作成するBook2のsheet1に纏めたいのですが、Book2のsheet1だけに纏めたいのですが、Book2のsheet1の名前は、固定で構いません。Book1の一番初めのsheetにコピーする時だけ3行目にある見出しだけは、Book2のsheet1に付けたく。それ以外のBook1のsheetは、デターだけをコピーしたいのですが、作成したマクロでは、実行時エラーがでます。【実行時エラー'9'】【インデックスが有効範囲にありません】とでます。次の部分です。「Sheets("mySheetName(i)").Copy Before:=Workbooks("Book1").Sheets("Sheet1")」また、Book2のsheet1の名前は固定で構いません。しかし、マクロの記述の仕方も判りません。どなたかご教授願います。何卒宜しくお願い申し上げます。

専門家に質問してみよう