VBA:「OnAction で呼び出す関数に引数を渡す方法」
んだよ。
できるんじゃん!
すみません。
探してみるものです。
シェイプにマクロを登録することができるわけですが、
そのマクロに引数が渡せないのかと思っておりました。
シェイプにマクロを登録すると、そいつをクリックしても
Selection にはならないので、どうやってそのシェイプから
来たかを判定する方法に苦慮しておりました・・。orz
以下、簡単な例。
まずは、呼び出されるマクロ。
Sub testName(testName As String)
MsgBox testName
End Sub
続いて、シェイプを作成しつつマクロ登録。
sub makeShape()
ActiveSheet.Shapes.AddLine(1278.75, 174#, 1357.5, 174#).Select
Selection.OnAction = "'testName""1234""'"
end sub
参考URLはこちら。
http://www.moug.net/tech/exvba/0080029.htm
関数名は、むき出しで引数をダブルクウォートで括る。
つまり、
testName"1234"
ですね。
これをシングルクウォートで括る。
'testName""1234""'
当然、ダブルクウォートは "" にしてエスケープさせる。
最後にそれらをダブルクウォートで括る。
"'testName""1234""'"
はい。
コレがわかってりゃ、無駄なコードかかずに済んだのに・・。
あ・・・あれ・・・なんか記憶のどこかでこの作業した気が・・。
ヤバイ・・・忘れすぎだろ・・。w
追記:
で、結局
sub makeShape()
ActiveSheet.Shapes.AddLine(1278.75, 174#, 1357.5, 174#).Select
Selection.OnAction = "'testName(1234)'"
end sub
でもできるし、シェイプ右クリックでマクロ登録時に
'testName("1234")'
で充分なことが判明。
やっぱり、これやったことあるわ・・。
で、第二引数の指定がうまくいかない問題が残ってるけど、ちょっと
今は進むことにします。
覚えている方いたら教えてください。