電子書籍の厳選無料作品が豊富!

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/08 13:16

>どのような記述が必要なんでしょうか?



アドインの登録と削除([ツール]-[アドイン])のイベントで動作するので・・・

登録時のアドインの初期化が必要なら記入します。
また、ツールバーなどにアドイン用のメニューを設定するなら、
メニューの登録と削除を行うプログラムを書きます。

実際に何が必要なのかはアドインにしたプログラムによって違うので、実際の作者以外には答えられないでしょう。

>「様々なメニュー」の中に、イベントプロシージャを使用したマクロも登録されていますが、アドイン化した後も使用出来る様にするには、

どのようなイベントか解りませんが、通常のイベントは何も変更する事無く動作します。

この回答への補足

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

補足日時:2007/01/07 21:46
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/08 13:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!