Google
 
Web itpro-blogger.blogspot.com
金曜日, 8月 31, 2007

[EXCEL]アドイン

▼質問
Excelでアドインを作るにはどうしたらいいのかな?

▼回答
保存の時に「Microsoft Excel アドイン (*.xla)」を選択して保存するだけだよ。

§Excelのアドインソフトの作り方
http://members.at.infoseek.co.jp/kenchan_h/index15.html
@IT:Windows TIPS -- Tips:Excelでユーザー定義関数をアドインとして提供する
http://www.atmarkit.co.jp/fwin2k/win2ktips/471funcadin/funcadin.html

▼質問
プロパティウィンドウ(ショートカットメニュー・右クリックメニュー・メニューバー)に項目を追加するには
どうしたらいいの?

▼回答
次のプログラムをワークブックオープンのWorkbook_Open()で呼べば追加できるよ。

Dim Obj As Object
Set Obj = Application.CommandBars("Cell").Controls.Add()
With Obj
.Caption = "コマンド表示名称"
.OnAction = "プログラム名"
.BeginGroup = False ' セパレータ追加表示(True:追加表示、False:追加無し)
End With

追加したものはワークブッククローズのWorkbook_BeforeClose(Cancel As Boolean)で削除すること
が必要だよ。

Application.CommandBars("Cell").Controls("コマンド表示名称").Delete

やってみたがうまくいかなかった。(T_T)アドインファイルにするとWorkbook_BeforeCloseは呼ばれ
ないことが判明。

そこで、次のクラスファイルを作成してExcelが閉じられた時に呼ぶようにやってみた。

Option Explicit

Public WithEvents App As Application
Public WithEvents Wb As Workbook

' クラスモジュールの初期化処理(Workbook_Openで呼出すが、Bookを呼出した後でないとダメ)
Public Sub Class_Initialize()
Set App = Application
Set Wb = Application.ActiveWorkbook
End Sub

' クラス内Applicationのワークブッククローズ処理(Excel終了時に呼出される)
Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
On Error Resume Next
Application.CommandBars("Cell").Controls("コマンド表示名称").Delete
End Sub

' クラス内Workbookのワークブッククローズ処理(Book終了時に呼出される)
Private Sub Wb_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.CommandBars("Cell").Controls("コマンド表示名称").Delete
Application.DisplayAlerts = True
End Sub

標準モジュールでクラスの生成が必要

Public myApp As New クラス名

■参考サイト
Excel のメニューおよびメニュー バーをカスタマイズする方法
http://support.microsoft.com/kb/830502/ja
Office TANAKA - VBA Tips
http://officetanaka.net/excel/vba/tips/index.htm


This page is powered by Blogger. Isn't yours?