[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『アドインでWorkbookのイベントプロシージャーを使用する方法』(mugi)
お世話になります。
アドインでシート追加時にコードを実行したいのですがうまくいきません。
「AddinInstall」や「AddinUninstall」、「Open」イベントは問題ないですが
「NewSheet」イベントをひろってくれないのはなぜでしょうか?
恐れ入りますが、どなたかご教授よろしくお願いいたします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
アドインブックの Thisworkbookモジュールのコードをすべてアップされてはいかがですか?
つまり、コードを見ない限り、なぜでしょう という問いに対しては、そのイベントをキャッチできないコードになっているのでは? という 推測しか申し上げられませんので。
(β) 2016/07/14(木) 18:56
問題の箇所は「Workbook_NewSheet(ByVal Sh As Object)」の部分になります。
(ListMakeは標準モジュールにかいたサブプロシージャです。)
アドインブック上では動作するのですが
アドイン登録後、別のブックで試すとNGという状況です。
恐れ入りますがご確認をよろしくお願いいたします。
Option Explicit
Const conAddinName As String = "SheetListup.xlam"
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Call ListMake End Sub
Private Sub Workbook_Open() 'アドインファイルが開かれた際に実行
Call Check_Addin With Excel.Application 'セルの右クリックメニューへの登録 With .CommandBars("Cell").Controls.Add(Temporary:=True) .FaceId = 59 'ボタンにアイコンを表示 .BeginGroup = True 'グループ線を引く .Caption = conAddinName 'アドインの名前登録 .OnAction = "ShowListBox" '実行するマクロ End With End With End Sub '-------------------------------------------------------------------------------------------------------
Private Sub Check_Addin() 'コマンドを検索し、既にコマンドがあればそれを削除
Dim objCC As CommandBarControl With Excel.Application.CommandBars With .Item("Cell") For Each objCC In .Controls If objCC.Caption = conAddinName Then .Controls.Item(conAddinName).Delete Next End With With .Item("Worksheet Menu Bar") For Each objCC In .Controls If objCC.Caption = conAddinName Then .Controls.Item(conAddinName).Delete Next End With End With End Sub '-------------------------------------------------------------------------------------------------------
Private Sub Workbook_AddinUninstall() 'アドインの組み込み解除時に実行
Call Check_Addin End Sub
(mugi) 2016/07/14(木) 19:32
アドインブックであれ、通常ブックであれ、Thisworkbookモジュールの Private Sub Workbook_NewSheet(ByVal Sh As Object) は 「それが記述されているブック」でのシート追加に反応します。 つまり、アドインブックのコードであれば、「そのアドインブック」のシート追加に反応するということは理解されているんですよね?
そうではなく、当該エクセル区画で開かれるすべてのブックのシート追加に反応させたかったのでは? であれば、コードは、このままではだめですね。
(β) 2016/07/14(木) 19:39
(mugi) 2016/07/14(木) 22:09
シート追加時の ListMake で何をしているのか、そのコードが見えないことと、その何らかの処理の対象が たまたまエクセル区画で開かれる、あるいは新規で作成される一般的なブックすべてを対象にしているのかどうか そういったこと(要件)がまったく不明ですが、コード自体は、以下にすれば反応すると思います。
ただ(繰り返します。要件が見えないのですけど)少なくとも、このシート追加時の処理は アドインでやるべきではないような そんな予感がします。
ともあれ。
Dim WithEvents xlApp As Application
Private Sub Workbook_Open() Set xlApp = Application End Sub
Private Sub xlApp_WorkbookNewSheet(ByVal Wb As Workbook, ByVal Sh As Object) MsgBox Wb.Name & vbLf & Sh.Name '★確認用コードです End Sub
(β) 2016/07/14(木) 22:16
いまさらで恐縮ですが
作成したマクロは、アクティブなブックの「シート」一覧をユーザフォーム上に表示(リストボックス)。
ユーザフォーム上での選択に応じてシートを切り替える というものです。
Excelはシート見出しが下に表示されますが、シート数が多かったり、シート名が長いと目的のシートを開くのが手間なので作成した次第です。(ウィンドウ横に表示してくれると助かるのですが。。。)
(左下の矢印を右クリックするとシート一覧が表示されますが、それを常に表示させるイメージです。)
ユーザーフォームの呼び出しは右クリックメニューから行っています。
「ListMake」はシート一覧を取得してユーザフォームに反映させるマクロです。
シートの追加や削除にあわせて実行しています。(シート名変更はいい方法が見つかりませんでしたが)
別のブックを開いた場合も、そのブックのシート一覧に更新するようにしています。
いろいろとアドバイスいただきありがとうございました。
(mugi) 2016/07/15(金) 09:52
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.