- ベストアンサー
(Excel VBA)シートコピー時マクロはコピーしたくない
教えていただけますでしょうか? マクロでシートをコピーしています。 しかし、コピー元にマクロ記述があるのですが(これは消さない)、 シートをコピーした後このマクロ記述まで一緒にくっついてきます。 ・あるシートのマクロ記述を消すには、どうマクロを組めばよいか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。Wendy02です。 >まず新規ブックにシートをコピーしてブック内でコピー→値貼り付けという流れになっています。そうするとどうしてもマクロまで持ってきちゃうんですよね……。 それは、ありえないと思いますね。 >→標準モジュール自体ありませんし、 > シートのモジュールもThisWorkBookにも一行も存在しません。 > なぜでしょうか? もし、本当に、プロジェクト・エクスプローラのすべてのVBE を開いても分からないというなら、コンパイル型マクロのウィルス感染しかありません。 ただ、セキュリティの警告が出たときに、そのメッセージの内容をチェックしてください。必要ならメモをしてもよいです。(ちゃんと出てきてはいませんが、ある程度は分かります) 最初に、セキュリティ警告ダイアログで、 --------------------------------------------- "C:\.................." ←ここを良くみてほしいです。 (省略されていますが、なんとか分かるはずです) 以下の発行者によるマクロが含まれています。 (ないばあいもある) --------------------------------------------- とか出てきます。 次に、セキュリティの「信頼出来る発行元[タブ]」の部分で、 少なくとも、 組み込み済みのアドインテンプレートをすべて信頼する にはチェックが入っているのでしょうか? 他にも、まだあります。私は、あまりこういう質問は得意でないというか、あれもこれも、と考えてしまうので、一般の回答者さんのように、「キメウチ」的に回答することが出来ません。もともと、セキュリティのオプション自体が、極論的には、一般のVBAプログラマ(CA認証を持たない製作者)が不要だという発想にあるものだと思っていますので、一旦は解決したと思っても、次期バージョンでは別の設定が発生したりします。なお、「低」でも、ウィルス感染自体は、アンチウィルスがあれば、本来は関係ありません。アドイン・プログラムの種類によっては、MS自身が「低」を勧めていたりするのですから、いかに、その設定は「不毛」なのか分かります。単に、マクロが入っています、程度のものしかないのです。 なお、#2のコードの Worksheets("Sheet1").Range("A1").PasteSpecial (xlPasteValues) ↓ Worksheets("Sheet1").Range("A1").PasteSpecial に変えていただければ、データ全部をコピーします。 シートのローカルマクロまでは、オブジェクトの単位が違いますので、コピーはされません。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。Wendy02です。 そのおっしゃっていたサイトのコードは、あまり参考にする内容でもないかもしれませんね。独特な書き方ですから。 >しかも、生成されたブックにマクロ記述は1行もないのに起動時にマクロの有効・無効を聞いてきます(なぜでしょう?)。 『標準モジュール』があれば、それだけで、マクロがあると言ってきます。それを開放していただかなくてはなりません。 本来は、MS-Office のセキュリティの問題も書かなくてはならないのですが、そのセキュリティというのは、実際に、ウィルス自体を防げればよいのですが、それは無理です。単に、マクロを働かせたくない人のオプションでしかありません。最終的には、一般ユーザーから、事実上、VBAを取り上げる気のような気がします。 それはともかくとして、 >あるブックのシートをコピーして"値だけ貼り付け"をしたい、です オーソドックスな書き方をすると、このようになりますね。 ActiveWorkbook.Worksheets("Sheet1").Cells.Copy Workbooks("TestBook.xls").Activate Worksheets("Sheet1").Range("A1").PasteSpecial (xlPasteValues) 'ブック名は任意
お礼
再度のご回答、ありがとうございます。 大変参考になりました! しかし、 >『標準モジュール』があれば、それだけで、マクロがあると言ってきます。 →標準モジュール自体ありませんし、 シートのモジュールもThisWorkBookにも一行も存在しません。 なぜでしょうか? あと、完全に私の質問が浅かった(不足していた)のですが、 書式も含めての値コピーがしたかったわけです。 よって、まず新規ブックにシートをコピーしてブック内でコピー→値貼り付けという流れになっています。そうするとどうしてもマクロまで持ってきちゃうんですよね……。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >・あるシートのマクロ記述を消すには、どうマクロを組めばよいか? Excel2002以上のバージョンでは、VBE に直接アクセスするのは、ウィルスもどきの行為として、禁止されておりますので、設定によって、禁止のメッセージが出てくるはずです。 どのようなマクロかは分かりませんが、 ActiveWorkbook.Worksheets("Sheet1").Cells.Copy _ Workbooks("TestBook.xls").Worksheets("Sheet1").Range("A1") 'ブック名は任意 として、シートの表面を取得して、別のブックのシートに貼り付ければ、付随するコードはコピーはされません。
お礼
いつもご回答ありがとうございます。 実は質問しながら自分でもいろいろ探してみたのですが、 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_200.htmlのサイトの "マクロを除いた配布用ブックを作成する。"を参考に組んでみました。 ところが、Wendy02さんもおっしゃられている通りに プロファイルごとにセキュリティの設定を変更しなければならないようです。 しかも、生成されたブックにマクロ記述は1行もないのに 起動時にマクロの有効・無効を聞いてきます(なぜでしょう?)。 また、そもそものやりたいことは あるブックのシートをコピーして"値だけ貼り付け"をしたい、です。
お礼
御礼が遅くなりまして、申し訳ありませんでした。 何度もご回答いただき、本当にありがとうございました。 Wendy02さんのご回答は、いつも丁寧で適切で助かっています。 さて、 >→標準モジュール自体ありませんし、 > シートのモジュールもThisWorkBookにも一行も存在しません。 > なぜでしょうか? ↑は解決しました。参考までに書きますと、 VBAでVBAのコードを削除した後、一度コンパイルまたは上書き保存すれば"マクロの無効・有効"を聞いてくることはなくなりました。 そりゃそうですよね……。 今回はとても助かりました、感謝します。 また質問することがあると思いますが、見かけたらまたよろしくお願いしますね!