こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

マクロをマクロを使ってコピーしたい

Excel2010です。
今、book1の各シート(ここでは"S1"で特定していますが、たとえばs1、s2、s3の3つがあるとします。)の左上隅「X」マークを右クリックすると出てくる「コードの表示」に以下の内容を記録しています。
-------------
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "s1" Then Exit Sub
Worksheets("s1").Range("e6") = Sh.Range("an7")
  Worksheets("s1").Range("e9") = Sh.Range("bj7")
  Worksheets("s1").Range("e10") = Sh.Range("br7")
End Sub
-------------
これをbook1のマクロ本体の実行によってbook1のシート"s1"を含むいくつかのシートのあるコピーbook2に、同じようにマクロでこの「Private Sub」をコピーしたいと思っています。どのようのすればいいでしょうか。
よろしくお願いします。

投稿日時 - 2013-02-10 13:30:06

QNo.7937850

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

こんにちは。

Microsoft Visual Basic for Applications Extensibility の参照設定をしてやる方法もあるのですが、今どき、マクロをマクロで書き換えたり、コピーするという程度でウィルス・ライクとかいうのは程度問題ですが、やっぱり、今どきになっても、掲示板の中では「禁じ手」として暗黙の了解になっているわけです。

ただ、実際、私から言わせると、そういうコードは汚いし、低能なマクロなのですね。
インターネットで調べれば、ここに書かなくても出てくるし、VBAなんかを使わなくても、Windowsマクロを使えば、そんなコードを書かなくても、セキュリティも関係なく簡単にコードを貼り付けることも可能です。(Windowsマクロは、簡単なコードで可能です)

お見かけした内容では簡単なコードのようですから、VBAで行うなんて、難題を言わないで、コードを、VBEditor を開いて、コピペしていけば、10数個レベルでしたら、そんなに面倒な作業ではないと思います。

>「book1にはbook2を作るメインのマクロがあり、それを実行する一連の動作の中で、上記のことをやりたい」

この質問は、意味が通じていないのです。Book1が、Book2を作る?

それらしいものを考えると、Class で、インスタンスを設けておけば、一応、同じ動きします。仮想のマクロを貼り付けてあげるわけです。難しいものにしてしまいます。
他にもアドインという手はあるのですが、それも状況によりますね。

ところで、

>Private Sub Workbook_SheetActivate(ByVal Sh As Object)
> If Sh.Name = "s1" Then Exit Sub
>  Worksheets("s1").Range("e6") = Sh.Range("an7")
>   Worksheets("s1").Range("e9") = Sh.Range("bj7")
>   Worksheets("s1").Range("e10") = Sh.Range("br7")
>End Sub

なぜ、このコードで、イベントが必要なのでしょうか。
s1以外のシートを開けたら、s1の一定のセルに上書きしていくだけで、Book自体の特定化もされていません。とすれば、ひとつのマクロで済むような気がします。
(Excel2010では、Personal.xlsmに置けばできるのではないかと思います。)

投稿日時 - 2013-02-11 10:48:13

ANo.3

逆にすればよいのです。
ブック1をコピーして、いくつかのシートがあるexcelのシートをコピーしたブックにインポートすれば。

投稿日時 - 2013-02-11 07:28:21

ANo.2

>よくわかりません

そうですか。ではアナタの直接の投稿は、コンピュータウィルスの作り方を質問しているのと同じ、非常識な質問なんだと承知してください。




>一連の動作の中で、上記のことをやりたい

出来る方法はお話ししましたが、コピーして使えるマクロを教わるには情報提供が足りていません。
でも何もわからない割には「ブック1にはブック2を作るメインのマクロがあり」とかなので、まぁ「言ってるだけ」なんだろうなと判断するわけです。


あなたの「ブック2を作るメインのマクロ」を編集せずにそのままコピー貼り付けして、新しいご相談として投稿してください。
そしたらそれにどう追記したり修正したらいいか、回答しましょう。ちゃんと情報提供すれば、私じゃなくても誰でもさくっと教えてくれます。

投稿日時 - 2013-02-10 18:03:22

ANo.1

>マクロをマクロを使ってコピーしたい

そもそもマクロを使ってマクロをコピーしたり取り付ける操作は、勿論やり方はありますが、そのままマクロウィルスの技法につながるので、ここのような公開の掲示板ではあまり触れない話題です。

また今のエクセルでは、安全のために、マクロを操作するマクロは動作禁止の設定になっています。
このセキュリティを解除してもよいときは、手動操作で、エクセルのオプションからセキュリティセンターの設定で「VBAプロジェクトオブジェクトモデルのアクセスを信頼する」のチェックを入れます。



>book1のシート"s1"を含むいくつかのシートのあるコピーbook2に、同じようにマクロでこの「Private Sub」をコピーしたい

ご相談の事は「マクロをコピーする」のではなく、次の手順で安全に実現できます。

1.オリジナルのブック1を名前を付けて保存などで「ブック1のコピー」として丸ごと別に保存する
2.ブック1のコピーに、ブック2から必要なシートや必要なデータなどをコピーしてくる
以上の動作は、手動でも、もちろんマクロを使っても出来ます。

投稿日時 - 2013-02-10 14:07:59

お礼

早速にお返事をいただきましてありがとうございます。小生、基礎知識・予備知識も皆無に等しいもので、よくわかりません。やりたいことは、
「book1にはbook2を作るメインのマクロがあり、それを実行する一連の動作の中で、上記のことをやりたい」わけです。
具体的な記述を教えていただければ助かります。よろしくお願いします。

投稿日時 - 2013-02-10 17:44:42

あなたにオススメの質問