- ベストアンサー
エクセルのVBAで新しくブックを開いた上でさらに…
エクセルのVBAで新しくブックを開いた上でそのブックにVBAを埋め込む事はできますか? 分かりにくいと思うので具体的にかきます。 今、ブック1にコマンドボタンAがあり、このボタンAを押す事により 以下の2つを実現したいです。 (1)あたらしくブック2を開きます。 (2)更にこのブック2のシートにはコマンドボタンBができており (3)このボタンBの機能としてこのボタンBを押すと ブック2のセルA1に数字1が入ります ブック2が開いた後で自分で、コマンドボタンBのマクロをブック2のモジュール内に書くのは簡単ですが、ブック1のコマンドボタンAを押したときに自動的にブック2のマクロを書き込みたいのです。 今、ボタンAを押すことで(1)と(2)まではできるのですが (3)のやり方がわかりません。 そもそもこういった事はできないのでしょうか? ご存知の人がいたら教えてください。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
特別に公開します。 '★★☆ マクロにマクロを作らせる ☆★★ Option Explicit Sub start() '新しいブック作成 Workbooks.Add [C1] = "私の名前は " & ActiveWorkbook.Name & " です" [C1].Font.ColorIndex = 3 'マクロ起動用ボタンの作成 ActiveSheet.Buttons.Add(50, 30, 320, 30).Select Selection.OnAction = ActiveWorkbook.Name & "!SUMPLE" Selection.Characters.Text = "私は新ブックに新しく作られた新マクロ実行ボタンです" [A1].Select '標準モジュールを挿入 ActiveWorkbook.VBProject.VBComponents.Add vbext_ct_StdModule '挿入したモジュールにコードを書き込む Application.VBE.CodePanes(1).CodeModule _ .AddFromString "sub SUMPLE()" + Chr(10) _ + "MsgBox ""私は新しく挿入されたブックの MsgBox です"" & Chr(10) & ""マクロで書かれたマクロから実行しています "" & chr(10) & ""OKボタンで新ブック(私自身)を閉じます""" _ + Chr(10) + "ThisWorkbook.Close False" _ + Chr(10) + "end sub" End Sub "[使い方] マクロを実行すると、新しいブックを挿入して、そこに新しいモジュールを挿入、ソースコードをマクロから書き込みます。新しいブックにボタンが貼り付けられていますのでクリックしてみて下さい。" "[内容説明] このブックには、VBE画面のメニューバーにある""ツール""→""参照設定""→""参照可能なライブラリファイル一覧""から ""Microsoft Visual Basic for Application Extensibility"" のチェックをオンして参照するように設定してあります。それによりモジュール操作に対する各種コマンドが使用可能になります。 新ブックにはボタンが作成されますので、それをクリックしてモジュールが作成されていることを確認してください。 確認後、新ブックは自動で削除され跡形を残しません。" "[ポイント] ●VBComponents コレクションの操作 ●CodePanes コレクションの操作" 詳しいことは、オートシェイプでお絵かきコンテスト で、検索してみてください。(これ以上は、管理人からお叱りを受けますので 詳しくは説明出来ません。)
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >エクセルのVBAで新しくブックを開いた上でそのブックにVBAを埋め込む事はできますか? >そもそもこういった事はできないのでしょうか? 数年前はしていたようですが、今は、VBA で、そういうことはしません。もし、新規ブックで動かしたければ、アドインにすればよいです。
お礼
回答ありがとうございます。 アドインの方法は使った事がなかったのでよく分からないのですが これを機会に少し調べてみたいと思います。 どうもありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
人間が作ったソフトですから、原則論では一般的に何でもできます。 質問の点までは、実例などもWEBに少数が載っています(特に海外の方の)。 質問の内容は、プログラムでプログラム(モジュール)を作ることですね。 具体的コード内容は、#2のご回答が出てしまっています。 WEB照会で「VBPROJECT.VBCOMPONENTS」で照会(Googleなど)すれば、相当数出てきます。 http://www.tech-notes.dyndns.org/excel_lib/add_macro.html ほか。 過去の質問 http://oshiete1.goo.ne.jp/kotaeru.php3?q=756026 もあったようです。 ーーー しかしエクセルVBAぐらいでは、そういう使い方はせず 手作業で (1)新しいブックブック2を作る (2)ブック2のシートにはコマンドボタンを張り付ける (3)コマンドボタンをクリックすると決まった処理が行われるよう クリックイベントをブック2のシートに作る。 そして ブック1のボタンを押すと、ブック2を開く こういうやり方をするものと思います。 ーー 別件ですが、コントロールの実行時作成も、解説書ではあまり解説は多くありません。エクセルという製品にふさわしいレベルのVBAの使い方の限度というものがあると考えているのではと思います。
お礼
回答ありがとうございます。 英語のサイトは敬遠してたのですが こういう知識は海外のほうが豊富にあるのかもしれないですね。 過去の質問についても検索ワードをうまく考えられずに 見つける事がでなくて質問させていただいたのですが やはり同様の質問があったようですね。 参考にさせてもらいました。 どうもありがとうございます。
- oji32
- ベストアンサー率21% (38/180)
以下のいずれかの処理でいかがですか? ・Book2のauto_openとして自動実行する。 ・Book1の処理で、Book2オープン後、 Application.Run book2 & "!マクロ名 で実行する。
お礼
回答ありがとうございます。 今回はANO.2さんのやりかたで試してみたのですが oji32さんの教えていただいた後者のほうは他のところで 試してみたいと思います。 ありがとうございました。
お礼
回答ありがとうございます。 参考になりました。 少しカスタマイズすればすぐ使えるようになりました。 自分だけで調べてたら数日間かかっていたでしょう。 大変ありがたかったです。 ありがとうございました。