前回はダブルクリックで色を塗りたいブックに直接マクロを作成したが、これではこの機能を使いたくなった時に毎回ブックにコードを記載する必要があり手間である。
そこで自作アドインに上記の機能を取り込み、ボタン1つで使用できるようにしてみようと思う。
完成形
さっそくだが完成形を見て頂きます。
このようにリボンの中にメニューが表示されています。
「DoubleClickSetColor」をクリックすると前回紹介したシートをダブルクリックすると色を塗るワークシートイベントマクロが有効になります。
「DoubleClickSetColor」ボタンをクリックした時にアクティブ状態のシートが対象になります。
「DoubleClickSetColorOff」をクリックするとワークシートイベントマクロが無効になります。 「DoubleClickSetColor」クリック後、別のシートがアクティブ状態で再度「Dクリック色塗り」クリックすると、後で選択したシートでのみイベントが発生します。
コード
今回は普段コードを記入する標準モジュールとは別に「EventGet」クラスを作成しました。
標準モジュール
'当初2つ共に引数に「ByVal control As IRibbonControl」指定していたが削除 Dim myApp As New EventGet Sub DoubleClickSetColor() Set myApp = New EventGet Set myApp.setWS = ActiveSheet End Sub Sub DoubleClickSetColorOff() Set myApp = Nothing End Sub
EventGetクラス
Public WithEvents myApps As Application Private TargetWS As Worksheet Private Sub myApps_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) If TargetWS.Parent.FullName & "-" & TargetWS.Name = Sh.Parent.FullName & "-" & Sh.Name Then With Target.Interior If .ColorIndex = xlNone Then .Color = 49407 Else .Color = xlNone End If End With Cancel = True End If End Sub Public Property Set setWS(ws As Worksheet) Set myApps = Application Set TargetWS = ws End Property
標準モジュールの記載
標準モジュールには「DoubleClickSetColor」、「DoubleClickSetColorOff」の2つを作成します。
「DoubleClickSetColor」でクラスインスタンスを作成してイベントの補足を開始、
「DoubleClickSetColorOff」でクラスインスタンスを破棄してイベントの補足を中止します。
「DoubleClickSetColor」を開始したときのアクティブシートをクラスに渡しています。
これについてはクラスの項で説明します。
クラスの作成
まずEventGetクラスを作成します。
上部メニューから「クラスモジュール」を選択してください。
挿入されたクラスの名前をEventGetに変更。
クラスをダブルクリックしてクラスのコード入力画面を開きます。
まずクラスの冒頭に「Public WithEvents myApps As Application」を記載してください。
その後は下記の作業でイベントの雛形を設定します。
最初に「Public WithEvents myApps As Application」を記載しておかないと、オブジェクトボックスの選択の際にmyAppsが表示されません。
入力された雛形に上記のコードを入力してください。
上記のコード全てをコピペでも、もちろん大丈夫です。
上記の作業で入力された「myApps_NewWorkbook」のイベントは削除しても大丈夫です。
WithEvents
アドインでイベントを補足するにはWithEventsキーワードを使用します。
Private | Public WithEvents 変数名 [as タイプ]
アドインでイベントを補足する場合にはタイプにApplicationを指定します。
これでEventGetクラスのインスタンスが作成されExcelが開いている間は、どのブックのどのシートのどのイベントでも補足することが出来ます。
今回はダブルクリックを補足したいので「SheetBeforeDoubleClick」を選択しました。
SheetBeforeDoubleClick
オブジェクトにApplicationを選択した場合にダブルクリックを補足する場合は「SheetBeforeDoubleClick」を使用します。
Private Sub オブジェクト変数_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
引数「Sh」にはダブルクリックしたシート(オブジェクト)、引数「Target」にはクッリクしたセル(Rangeオブジェクト)の情報が格納されています。
標準モジュールの項で紹介した「DoubleClickSetColor」をクリックした時のアクティブシートの情報とダブルクリックをしたシートの情報を突き合わせて、「両者のブック名-シート名」が一致した場合のみダブルクリックイベントの処理を実行しています。
これは想定外のシートでの処理を防ぐための対応です。
アドイン化
ここまででコードの入力は完了しました。
次にこのコードをアドイン化します。
「名前を付けて保存」でファイルの種類を「Excelアドイン」に設定します。
そうすると上記のファイルの保存場所が自動的にアドイン保存用のフォルダに変更されます。
後は任意の名前を指定して保存してください。
アドイン有効化
次にアドインを有効化します。
アドインとして保存しただけでは使用できず、有効化する必要があります。
リボンから開発→Excelアドイン
開いたアドインメニューから先程保存したアドインにチェックを入れて保存
以上で使用する準備が整いました。
実際にマクロを使用する際は、ユーザー設定のツールバーを新規作成して登録するパターン
アドイン自体にリボンに登録する設定を登録するパターン
こちらの記事を参照ください。
まとめ
以上で「セルをダブルクリックで色塗り」マクロをどのブック・シートでも気軽に使用できるようになりました。
せっかく自作した機能なので、いつでもどこでも使えると便利ですね。