意の中のカワズ(35歳の壁 別館)

35歳の壁の別館ブログです。コード中心になるようにしたいので、技術雑記はできるだけ本館に書きます。

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")'

で充分なことが判明。
やっぱり、これやったことあるわ・・。

で、第二引数の指定がうまくいかない問題が残ってるけど、ちょっと
今は進むことにします。

覚えている方いたら教えてください。