• ベストアンサー

Book(.xls)→アドイン(.xla)に関する質問

現在Excelにて、様々なメニューを作成したBook(.xls)があります。これをアドイン(.xla)にしようと思っています。 元Bookの「様々なメニュー」の中に、イベントプロシージャを使用したマクロも登録されていますが、アドイン化した後も使用出来る様にするには、 Private Sub Workbook_AddinInstall() Private Sub Workbook_AddinUninstall() にて、どのような記述が必要なんでしょうか? 教えて頂ければと思います。

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

  • ベストアンサー
  • masa_019
  • ベストアンサー率61% (121/197)
回答No.2

こんにちは。 どのブックでもShiftキーを押しながら右クリックした場合には オリジナルのメニューを出したいということですね。 だいたい以下のような感じになります。 ↓を.xlaで保存して、アドイン登録して試してみてください。 (ThisWorkbookモジュール) Option Explicit Private WithEvents xlApp As Application Private Sub Workbook_Open() Set xlApp = Application End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Set xlApp = Nothing End Sub Private Sub xlApp_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Dim CB As CommandBar Dim CT As CommandBarControl Dim i As Integer If GetAsyncKeyState(vbKeyShift) <> 0 Then Cancel = True On Error Resume Next Application.CommandBars("MyMenu").Delete On Error Resume Next Set CB = Application.CommandBars.Add("MyMenu", msoBarPopup, , True) For i = 1 To 3 Set CT = CB.Controls.Add(msoControlButton) With CT .Style = msoButtonCaption .Caption = "ボタン" & i .OnAction = "MACRO1" End With Next i CB.ShowPopup Set CT = Nothing Set CB = Nothing End If End Sub (標準モジュール) Option Explicit Declare Function GetAsyncKeyState Lib "user32" (ByVal nVirtKey As Long) As Long Sub MACRO1() MsgBox CommandBars.ActionControl.Caption & "がクリックされました。" End Sub

Yes_No_F
質問者

お礼

2度も、的確な回答をありがとうございます。 アドインで正常な動作を確認しました。  これらの問題は、SEの実務経験者でない私にとって、ずっと考えていましたが分からなかった問題でした。 とってもためになりました。感謝です。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>どのような記述が必要なんでしょうか? アドインの登録と削除([ツール]-[アドイン])のイベントで動作するので・・・ 登録時のアドインの初期化が必要なら記入します。 また、ツールバーなどにアドイン用のメニューを設定するなら、 メニューの登録と削除を行うプログラムを書きます。 実際に何が必要なのかはアドインにしたプログラムによって違うので、実際の作者以外には答えられないでしょう。 >「様々なメニュー」の中に、イベントプロシージャを使用したマクロも登録されていますが、アドイン化した後も使用出来る様にするには、 どのようなイベントか解りませんが、通常のイベントは何も変更する事無く動作します。

Yes_No_F
質問者

お礼

ここで質問したのが、まだ2回目で慣れてない部分と、自分自身がSE等の経験無くプログラム関係の知識が粗いので、下手な質問をしてしまいました。すいません。これから、気を付ける様にしたいと思います。

Yes_No_F
質問者

補足

すいません。質問の仕方が悪かったです。 下記URLの質問をして、回答を頂きました。この中で「処理したい内容(1)」について、masa_019さんから回答を頂きました。そして、これで方針を決めました。 http://oshiete1.goo.ne.jp/qa2649013.html これを使用してアドインにしたいと思っています。アドインにした後、動作上問題無く使用出来れば良いと思ってます。 その方法が分からないとの意味です。

関連するQ&A

  • アドインの組込みとブックが開くタイミングがずれる

    全てのブックで使用するアドインを作成しました(AddIn.xlaとします)。 Excelの起動時にアドインが自動で組み込まれるように、アドインファイルをXLSTARフォルダに入れました。 あるブック(Book.xlsとします)の Workbook_Openイベントで AddIn.xlaに含まれるプロシージャを実行する時に、次のような問題が出ました。 エクスプローラから Book.xls をダブルクリックして開くと、AddIn.xlaに含まれるプロシージャを実行するところでエラーが出ます。 Excelを起動して、メニューバーから Book.xls を開くと、問題ありません。 この症状は、PCによって出るものと出ないものがあります。 エラーの状況から見ると、AddIn,xla が組み込まれるタイミングと Book.xla の Workbook_Openイベントが実行されるタイミングにずれがあるように見えます。 AddIn.xla が組み込まれるまで Book.xls を開かないようにすることは可能でしょうか。

  • 自作アドインのFunctionプロシージャの戻り値を取得

    ExcelVBAのコード内で、自作アドインのFunctionプロシージャを呼び出して戻り値を取得したいのですが、方法がわかりません。 例えば、AddinTest.xlaにPublic Function FuncTest()があり、その戻り値が"Test"だとして、他のExcelファイルのマクロ内で、Msgboxで戻り値"Test"を表示するなど。。。 アドイン内のSubプロシージャを呼び出すには、Application.Run macro:="AddinTest.xla!~"と記述すれば呼び出せることはわかったんですが、Functionプロシージャの戻り値を取得することができないのです。 よろしくご教授ください。

  • Book1.xlsとBook2.xlsのエクセルファイルが有ります。

    Book1.xlsとBook2.xlsのエクセルファイルが有ります。 VBAを作成しているのはBook2.xlsで操作しています。 Book1 Sheet1 A B C 1 6 4 2 2 8 5 3 3 5 1 4 . Book1のシートのB列とC列には整数が入力されています。 A列には計算式が入ります。 例)A1の計算式 =B1+C1 A2の計算式 =B2+C2 A列の結果をBook2 Sheet1 のA列に反映しようとした場合に、 以下のVBAだと、計算式のコピーになってしまうので、計算結果の値を反映する事が出来ません。 A列の計算結果(上記の例だと、6,8,5)をまとめて反映させる方法はありますか? Sub tashizan() Dim thisBook As Workbook Dim workBook1 As Workbook Set thisBook = ThisWorkbook Set workBook1 = Workbooks.Open("C:\Documents and Settings\Book2.xls") thisBook.Worksheets("Sheet1").Range("A1:A100").Copy workBook1.Worksheets("Sheet1").Range("A1") workBook1.Close End Sub 初心者ですので、宜しくお願いします。

  • Excelのアドイン

    Excelのアドインを作成しています。 特定のファイルにだけ適用したいため、そのファイルのWorkbookのopenイベントでAddin.Installed = Trueにするようにしています。 Addin.Installed = Falseにするタイミングをアドイン側(xlaファイル)のWorkbookのcloseイベントに入れてしまうと Addin.Installed = Falseにした時点で自分自身(xlaのWorkbook_close)を呼び出してしまいます。 if Addin.Installed = Trueを入れていますのでAddin.Installed = Falseが2回実行されるわけではないのですが 再帰的な呼び出しを回避する方法はないでしょうか? 終了時にexcelがエラーを起こして "エラー送信"画面が出てしまって ここら辺があやしいのではと思っています。 環境はWindowsXP Excel2002 SP3 です。

  • アドインファイルの作り方

    マクロを作成して、人に配ろうかと考えています。ツールバーにコマンド追加してマクロを登録しました。ユーザー設定で、ツールバーの添付で保存(xls)して、別にアドインファイル(xla)で保存しました。別のパソコンにアドインすると、Personal.xlsにマクロが見つかりません。って出てきます。自分のパソコンにもどって、アドインし、コマンドを実行すると、元のxlsファイルが自動的に読み込まれて、実行できてしまいます。ユーザー設定を開きマクロの登録を見てみると、元のxlsファイルが関連付けられてしまっています。(因みに、マクロは、Private としています。 どうにか?アドインファイルだけで完結したいのですが、どのようにすればいいのでしょうか?教えてください。宜しくお願い致します。

  • エクセルのマクロ イベントプロシージャについて

    エクセルのマクロについて教えて下さい 今 book1を開いたら動くマクロを組んでいます 「Private Sub Workbook_Open()」を 使って 内容は この中で別のブック(仮にbook100とします) を開いてその中のデータ (すでに選択してあります) をコピーして book1に貼り付けて book100を閉じる。 という作業なのですが book100を選択しようとするとエラーが起きてしまいます。 Private Sub Workbook_Open() の中では違うブックに対して 作業ができないようになっているのでしょうか? よかったら御教授ください

  • エクセルVBA アドイン メニューの作成方法

    OS:windowsXP HomeEdition ソフト:Excel2003 アドインを作成し配布したいのですが、xla形式で保存しエクセル上でアドインさせ、 作成したメニューからテスト起動させてみると、アドインの元のファイル(拡張子xls)が 展開してしまいます。展開させずにアドインプロシージャを起動させたいのですが 何が原因か調べてもわかりませんでした。知っている方、ご助言御願い致します。 以下に、私の作成したマクロを記述します。 マクロ解説HPで勉強しつつ作成致しました。 ~~~~~~~~~~~~~~~~~~~~~~~~~ <ThisWorkBookへの記述> Dim mySubMenu As CommandBarControl Sub MakeSubMenu() Dim myMenu As CommandBar Dim cmdSubMenu As CommandBarControl 'すでにサブメニューがあれば削除する DelSubMenu Set myMenu = Application.CommandBars("worksheet Menu Bar") Set mySubMenu = myMenu.Controls.Add(Type:=msoControlPopup) mySubMenu.Caption = "メニュー" Set cmdSubMenu = myMenu.Controls("メニュー").Controls.Add(Type:=msoControlButton) cmdSubMenu.Caption = "コマンド1" 'サブメニューでコマンド1を選択したとき cmd1() を呼び出す cmdSubMenu.OnAction = "cmd1" Set cmdSubMenu = myMenu.Controls("メニュー").Controls.Add(Type:=msoControlButton) cmdSubMenu.Caption = "コマンド2" 'サブメニューでコマンド2を選択したとき cmd2() を呼び出す cmdSubMenu.OnAction = "cmd2" End Sub Sub DelSubMenu() 'メニューバーのサブメニューを削除する On Error Resume Next mySubMenu.Delete End Sub <標準モジュールへの記述> Private Sub cmd1() MsgBox "コマンド1を選択しました" End Sub Private Sub cmd2() MsgBox "コマンド2を選択しました" End Sub ~~~~~~~~~~~~~~~~~~~~~~~ 尚、マクロは簡略化し、のせております。 よろしく御願い致します。

  • 他のBOOKにマクロを反映させない様にするには?

    Excel VBA初心者です。 エクセルのWorkbook Openイベントでワークシートメニューバーを非表示にしています。 マクロを作成したBookを開いてから他のBookを開いた場合はワークシートメニューバーは表示されるのですが(マクロは反映されない。)、他のBookを開いた後、マクロを作成したBookを開いた場合ワークシートメニューバーが他のBookまで非表示になってしまいます。(マクロが反映される。) マクロを作成したBookをその他Bookから常に独立させて(別のインスタンス?として開く??)開く様にするにはどうしたらよろしいでしょうか? 以下がOpenイベントです。 Private Sub Workbook_Open() Application.ScreenUpdating = False '動きを見せない Application.DisplayAlerts = False '選択画面をとばす Application.IgnoreRemoteRequests = True '他のアプリケーションを無視 Application.CommandBars("Worksheet Menu Bar").Enabled = False 'メニューバー非表示 ~以下長々とあります。~ End Sub 宜しくお願い致します。 ※メニューバー非表示は、社内に配布した場合にシート内容を変更されたくないためです。

  • Personal.xlsでUserFormを開く

    Personal.xlsに登録したマクロでBookのUserFormを開くには? 環境:EXCEL2000 Windows7 Book1.xlsにUserForm1を作りました。 Book2.xlsにもUserForm1を作りました。 (Book1のUserForm1とBook2のUserForm1は異なるForm) Personal.xlsに次のSubを追加しました Public Sub DispForm1() ActiveWorkbook.UserForm1.Show vbModeless End Sub ツールバーに釦を追加しマクロ「DispForm1」を登録しました やりたい事 (1)Book1を開き釦を押すとBook1のUserForm1を表示する (2)Book2を開き釦を押すとBook2のUserForm1を表示する 問題点 釦を押すと 「オブジェクトは、このプロパティまたはメソッドをサポートしていません」 のエラーがでる アドバイスよろしくお願いいたします。

  • Excel VBA ブックが本当に閉じられた時だけ別のブックを閉じたい

    Excel VBA ブックが本当に閉じられた時だけ別のブックを閉じたい A.xls B.xls と二つのブックがあります。 A.xlsが閉じられる時、B.xlsも同時に閉じたいです。 A.xlsに以下のマクロを入れました。 Private?Sub?Workbook_BeforeClose(Cancel?As?Boolean) ?Workbooks("B.xls").Close?SaveChanges:=False End?Sub 問題はA.xlsが保存してない場合、「A.xlsへの変更を保存しますか?」というメッセー ジが 出てきますが、そこでキャンセルを押された場合でもB.xlsが閉じられてしまいます。 A.xlsが本当に閉じられた時だけB.xlsを閉じたいのですが そのようなことは可能でしょうか?