メモ
Excelで図形を作ってOnActionを使ってみようとしていたら,次の記事を見つけました。
Excel VBA を学ぶなら moug モーグ | 即効テクニック | OnActionで実行するプロシージャに引数を渡す
図形にマクロをつけて,引数もつけれると(;´▽`A``
これはいい。
軽くテストしてみました。
Sub test() Dim Sht As Worksheet: Set Sht = ActiveSheet Dim Rng As Range: Set Rng = Sht.Range("c5:e8") Dim c As Range For Each c In Rng With Sht.Shapes.AddLabel(msoTextOrientationHorizontal, c.Left, c.Top, c.Width, c.Height) .Name = c.Address(False, False) & "_BTN" .OnAction = "'test2 """ & .Name & """ '" '.OnAction = "'test2 ""印刷""'" End With Next End Sub Sub test2(Str As String) MsgBox Str End Sub
セルのシングルクリックイベントの代わりに図形をのせているので,各セルのleft,top,width,heightを使って図形を書き,それにOnActionをのっける。
セルのアドレスを捕まえることができるなら,いろいろとやれるのでそのためのものです。
testマクロを動かすと,
セルの上に図形をきれいにはりつけます。
無色透明にするなら .Fill.Visible=msoFalse をすればいいのかな。
これを実行すると,そのセルを選んだら(そこに貼り付けられている図形をクリックしたら)
このように,ちゃんとアドレスにしたがった値を返せます。
これはきっといいものな気がします。
onActionでマクロを貼り付けられた図形を動かすのはちょっと面倒なので,その点もいい感じ。
シートに貼る形のActiveXのリストボックスが,解像度が変わったり,タブレットで縦横表示が切り替わり続けると容易に表示が崩れたりと役立たずだったので,
リストボックス風なものを自分で実装したりしていました。
それを実現するためのいい手段が手に入った気がします。
追記 さらにメモ
のコメントのところから抜粋
参考にさせて頂き、助かりました。
第二引数の指定方法が分かりましたので、例示しておきます。
Sub AAAA(str1 As String, str2 As String)
.OnAction = "'AAAA ""引数1"", ""引数2""'"
きっといつか使う
さらにさらに追記
まぁこれも面白いわけですが,Powerpointの時もそうでしたが,セルに書く必要ないじゃないか という根本的なところにいきますね。。
セルにこだわらずに,加えた図形群でリストボックスぽいものをやる方法を考えていこう。