• ベストアンサー

エクセルの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)のやり方がわかりません。 そもそもこういった事はできないのでしょうか? ご存知の人がいたら教えてください。よろしくお願いします。

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

  • ベストアンサー
  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.2

特別に公開します。 '★★☆ マクロにマクロを作らせる ☆★★ 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 コレクションの操作" 詳しいことは、オートシェイプでお絵かきコンテスト で、検索してみてください。(これ以上は、管理人からお叱りを受けますので 詳しくは説明出来ません。)

hans2007
質問者

お礼

回答ありがとうございます。 参考になりました。 少しカスタマイズすればすぐ使えるようになりました。 自分だけで調べてたら数日間かかっていたでしょう。 大変ありがたかったです。 ありがとうございました。

その他の回答 (3)

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

こんばんは。 >エクセルのVBAで新しくブックを開いた上でそのブックにVBAを埋め込む事はできますか? >そもそもこういった事はできないのでしょうか? 数年前はしていたようですが、今は、VBA で、そういうことはしません。もし、新規ブックで動かしたければ、アドインにすればよいです。

hans2007
質問者

お礼

回答ありがとうございます。 アドインの方法は使った事がなかったのでよく分からないのですが これを機会に少し調べてみたいと思います。 どうもありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

人間が作ったソフトですから、原則論では一般的に何でもできます。 質問の点までは、実例なども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の使い方の限度というものがあると考えているのではと思います。

hans2007
質問者

お礼

回答ありがとうございます。 英語のサイトは敬遠してたのですが こういう知識は海外のほうが豊富にあるのかもしれないですね。 過去の質問についても検索ワードをうまく考えられずに 見つける事がでなくて質問させていただいたのですが やはり同様の質問があったようですね。 参考にさせてもらいました。 どうもありがとうございます。

  • oji32
  • ベストアンサー率21% (38/180)
回答No.1

以下のいずれかの処理でいかがですか? ・Book2のauto_openとして自動実行する。 ・Book1の処理で、Book2オープン後、 Application.Run book2 & "!マクロ名 で実行する。

hans2007
質問者

お礼

回答ありがとうございます。 今回はANO.2さんのやりかたで試してみたのですが oji32さんの教えていただいた後者のほうは他のところで 試してみたいと思います。 ありがとうございました。

関連するQ&A

  • VBAによるブック間のシートの移動またはコピペ

    検索で探すもピッタリ来るものが探せなかったものですみません。 Aブックにシート1とシート2があります。 bブックにシート3があります。 シート2とシート3の名前は同じ"abc"とします。 Aブックのシート1にコマンドボタンを設置し、このボタンをクリックするとシート3をシート2に移動またはコピー&ペーストするようにVBAで実現できますでしょうか? よろしくご教授ください。

  • エクセル)VBAで他のブックのセル参照

    はじめまして。 エクセルのVBAについて教えてください。 VBAで、 book1のsheet1のセルA1にあるデータを開いていない(アクティブでない)別のbook2のsheet2のセルB1にコピーしたいのですがこんなことってできるのでしょうか? ・・やはり開いていないとダメなんでしょうか? あと、これって"ブック参照"っていうことなんでしょうか?自分がやりたいことが何なのか判らないので上手く調べる事が出来ず難儀しています。 よろしくお願いします。

  • VBA(エクセル)で自動的にボタンをクリックさせるには

    いつもお世話になっております。 下記のことがしたいのですがどうやって良いのかがわからなくって困っております。 やりたいこと。 AブックとBブックが有るとします。(双方ともエクセルファイル) エクセルのVBAで、Aブックのシート上のコマンドボタンを押すと Bブックのシート上のコマンドボタンをクリックするという動きを VBAでさせたいのですがどうしてもクリックさせることができません。 試したこと。 初めは、AのボタンをクリックするとBのボタンをセレクトして SendKeysでENTERを送ってみたりしたのですがうまくいきませんでした。 何かやり方が有りましたら、お教えいただけませんでしょう。 宜しくお願いいたします。

  • ExcelVBA2010 マクロが動作しない

    Excel2010のVBAについて質問します。 ブックAとブックBがあり、ブックAにはVBAのモジュールの記述がります。 そのブックAの中にあるシート1にコマンドボタンを作成し、このボタンにモジュールが登録されています。 ブックAを起動すると、ブックAの中にあるシート1をブックBにコピーします。 ブックBにコピーされたシート1のコマンドボタンに登録されているボタンをクリックすると、ブックAのVBAのモジュールが起動され動作されるはずですが、なぜかブックB内のシート1のコマンドボタンのモジュール先がブックAでは無くブックB内のリンク先に変更されてしまい、VBAが動作しません。 パソコンAでは動作し、パソコンBでは上記のエラーになってしまいます。 Excel本体の設定等を見比べましたが、一向にわかりません。 どうかご教授をお願いいたします。

  • エクセルVBA初心者です

    参考書籍を教えてください 質問1 会社でエクセルマクロを使う機会が増えました。大抵のことはマクロの記録で対応してますが、細かいファイル操作が出来ません。VBAを勉強する必要があると思ってます。何か良い参考書はありませんか? 質問2 ブックAでマクロAを作りました。マクロAの中で、ブックBのマクロBを実行させてます。マクロBは、計算結果としてブックB上に新シートを作成し、終了します。その後、マクロAに戻りブックBの新シート上のセル2個を選択しコピーし、ブックAにてペーストさせようとしてます。 マクロAはブックA上で「マクロの記録」で作成しました。 実行させると、マクロBの終了時点でストップするようです。 何がマズイのでしょうか?

  • EXCEL VBA シートの名前を指定してコピー

    EXCEL VBA 初心者です。 とても困っています。 助けてください。 excel2010を使っています。 今,「原本」というシートがあり,それをマクロを使って同じブック内にコピーしたいと思っています。 コピーして新しく作られたシートの名前は「A1」のセルに入力されている値にしたいです。 コピーされた後のシートにはマクロボタンは削除したいと考えています。 また,コピーした後のアクティブシートは「原本」のシートにしたいのですが これを全部いれたコマンドはどのようになるのでしょうか。 似たような質問だったり,回答があるのですが, どのように組み合わせたらいいのかよく分かりません。 どなたかお助けいただけないでしょうか。 よろしくお願いします。

  • ExcelのVBA、セルについて教えて下さい

    セル内容の比較についてのマクロで教えてください。 まずブックAとブックBという2つのワークブックがあります。 ブックAのD4セルにはS144A03といったよな数字と英語が入っています。 ここからが行いたいことなのですが ブックAでマクロ実行 ⇒ ブックBを開きシートAを選択 Application.InputBoxでブックBのシートA内のセルを選択してOKを押した時 ブックAのD4セルの内容とApplication.InputBoxで選んだセルの内容が同じなら”認証OK” 違う場合は”認証NG”とMsgBoxで表示されるようにしたいです。 認証後はどちらの結果であってもブックBの方は閉じてしうまう形にしたいです。保存の確認はいりません。 ご指導のほどよろしくお願いします。

  • VBAで別のExcelブックのボタンのマクロ登録

    Excelブック1とExcelブック2があります。 Excelブック1はVBAで 1)Excelブック2を開いて 2)Excelブック1のワークシート(Sheet1)と  モジュールシート(Module1)を  Excelブック2にコピーします。 3)ワークシート(Sheet1)にはコントロール(ボタン)が貼り付けてあって  このボタンをクリックするとモジュールシート(Module1)の中の  Excute_Button()というプロシージャ(マクロ)を呼び出すため  Excelブック1のVBAで  wb.Worksheets("Sheet1").Shapes.Range(Array("Button 1")).Select  Selection.OnAction = "Excute_Button"  と記述してボタンのマクロの登録をします。   (wbはExcelブック2を指しています) 4)Excelブック2を保存して閉じる。 という処理をしています。 この後、Excelブック1を閉じて、 Excelブック2を開いてワークシート(Sheet1)のボタンをクリックすると Excelブック1が開いてしまいます。 Excelブック2のボタンのマクロの登録のマクロ名を見てみると Excelブック1のファイル名!Excute_Button となっています。 Excelブック1のVBAで、ここを単にExcute_Buttonだけにするには どのようにすればよいでしょうか。

  • エクセル(VBA)のブック間でのコピーペーストについて

    こんにちは。VBA入門レベルのものですが、質問させてください。 ブックAとブックBを開いた状態にし、 ・ブックA⇒VBAを組む&データ貼付け先 ・ブックB⇒データコピー元 ブックBの特定セル(例:D10)からブックAの特定セル(例:E12)にコピー⇒貼付 する方法を探しています。 なお、ブックBは、ブック名とシート名が都度変わるので、「ブックAではない方の開いているエクセルファイルからデータをコピーし、ブックAに貼付ける」の構文にしたいです。 また、コピペの他に数式(イコール)で飛ぶ方式でもかまいません。 この内容でのVBAの記述方法が分かる方、どなたか教えて頂けますでしょうか。 すみませんがよろしくお願いいたします。 ※エクセル2003です。

  • エクセルでブック上の転記

    例  (1)ブック(a)のsheet1のセルA1~G1を入力専用とする  (2)入力専用に入力する  (3)ブック(b)のsheet1のセルA1~G1に転記される  ※ブック(b)は開いてない状態  (4)(1)を繰り返す   ブック(b)のセルはブック(a)で入力される度に段が変わってる この説明でわかりますでしょうか。 VBAは初心者ですが多少はわかります。

専門家に質問してみよう