エクセル2007アドイン、セルの塗りつぶしとフォントのパレット作ってみた、その21
前回2日前の続き
午後のパレットでセルに色を塗っているところ
昨日のマクロ
エクセルでドット絵、右クリックで色取得、左クリックで色塗りマクロ ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
を元にして午後のパレットに追加してみた
使い方
右上にあるチェックボックスにチェックを入れて
パレットからクリックで色を選ぶ
あとはセルをクリックすると塗れる、キーボードの矢印キーでも塗れる
本当はチェックボックには連続って表示したんだけど
表示する場所がなくて、うまく表示できなかった
パレットを大きめの表示にすると表示される
連続って名前はクリックでどんどん色を塗っていくからつけてみたけど
いまいちだなあ、表示名はいつも悩む
ダウンロード
ファイル名:午後のパレット_20150418.zip
仕様
塗られる色はRGBで指定しているので
テーマを変更してもテーマに沿った色にはならないのは昨日のマクロと一緒
不具合
パレットのセルの塗りとフォントカラーを変更すると変な動きになるかも?
ブックをひとつも開いていない状態で使うとエラーになるはず
チェックを入れてから色を選ばないで色を塗ると白色で塗られる
参照したところ
Excel でアプリケーションレベルのイベント ハンドラーを作成する方法
2015年5月19日追記
この下にあるメモは新しく書き直した
WithEvents練習、アクティブセルやシート、ブックの変更時に動作させたいものがあるとき ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
追記ここまで
ここからメモ
今回の機能も以前からあったらいいなあとは思っていたけどどうすればできるのか昨日までは全く見当もつかなかった
クリックした場所に色を塗るんだからクリックされたセルを取得する必要がある
これはワークシートにはSelectChangeっていうイベントが用意されていて
これは選択セルが変更された時に起こるイベントで変更した先のセル範囲を教えてくれる
引数のTargetが変更先のセル範囲
でもこれでわかるのはこれを書いたシートだけなので、別のシートでもセル範囲を取得しようとしたらすべてのシートに書くの?そんなのムリだけど仮に全部に書いてもブックを変更したらやっぱりわからなくなるってそう思っていました
でも
クラスモジュールに
標準モジュールに
Private cls As New Class1
Sub test登録()
Set cls.myBookChange = Application
Set cls.mySheetChange = ActiveWorkbook
Set cls.mySelectChange = ActiveSheet
End Sub
これでtest登録を実行して
この状態から選択セルをC5に変更(クリック)すると
って表示される、選択セルが変更されたのが取得できている
次はシート変更、Sheet2に変更すると
OK
次はブックの変更、Book2を選択してみると
OK、ブック変更も取得できている
セルの変更はSelectChangeを使って
シートの変更はSheetDeactivate、ブック変更はWorkbookDeactivate、この二つは
元のシートやブックが非アクティブ状態になった時に動くものみたい
クラスモジュールに
Public WithEvents myBookChange As Application
って書くと
矢印のところのドロップダウンリストに出てくるので選択すると
この一覧は変数に指定した型に合ったものになる
myBookChangeはApplicationに指定したのでApplication用のイベント一覧
赤枠の中の物が追加されて
さあこのイベントが発生した時に何がしたいか書いてって状態になる
このままではブックを変更するとシート変更やセル変更のものが動かないから
Module1に書いたtest登録を実行して登録し直す必要があるのでClass1のブック変更時にtest登録を実行するのを書き加えて
'ブック変更時
Private Sub myBookChange_WorkbookDeactivate(ByVal Wb As Workbook)
MsgBox "BookChanged!"
End Sub
↑を↓に変更
'ブック変更時
Private Sub myBookChange_WorkbookDeactivate(ByVal Wb As Workbook)
MsgBox "BookChanged!"
Call Module1.test登録
End Sub
これならブックを変更した先でシート変更やセル変更でも取得できる
今回のでクラスモジュールの使い方が少しわかった、今までも似たような使い方はしていたんだけどやっぱり理解できていないなあ
それでもやってみたいことはできたのでかなり満足