- ベストアンサー
Excel VBA 動的に作成したチェックボックスにイベントを追加したい
http://oshiete1.goo.ne.jp/qa504573.html を参考にしたのですがエラーが出ます。 ------標準モジュール------- Dim NewChkBox As New Class1 Sub main() Dim oObj As OLEObject Set oObj = ActiveSheet.OLEObjects.Add(classtype:="forms.checkbox.1") oObj.Top = 10 oObj.Left = 10 NewChkBox.cb = oObj Set oObj = Nothing End Sub ---------クラスモジュール-------- Public WithEvents cb As Checkbox Private Sub cb_Click() MsgBox "You clicked the checkbox." End Sub 実行すると、 「オブジェクトはオートメーションイベントを発生させることができません。」 というエラーメッセージが出ます。 OLEObjectで作成したコントロールに イベントを追加するにはどのようにしたら良いのでしょうか?
補足
サンプルですが、両方とも動作を確認しました。 質問以外の部分でもいろいろと勉強になりました。 ありがとうございました。 今回の質問の意図はWendy02さんのお考えの通りで、 「動的に確保したOLEObjectのイベント追加をClassを使って実現したい」でした。 ただ、一応完成したものを作らなければならなかったので、 最後までClassで記述する方向であがいてみて、駄目なら 仕様を見直して妥協するか、あのサンプルを 利用して書こうかと思っていました。 >これは、私は、禁じられたマクロ・コードだと思っています。 正直私も、あまり使いたくないコードです。 サンプルでわからなかった部分があります。 Application.OnTime Now, "SetClass" この行の働きです。普通にSetClassをコールすると動かないのですが、 (これが再三言われているオブジェクトが流れてしまうという現象なのでしょうが) サンプルのように記述すると動くのが理解できませんでした。 一方Auto_Open内ではSetClassを直で呼んでいますが、これでイベントが 正常に登録されますが、これはコントロールのメモリ上の取り扱いの違いからくるものだろうと いうことはなんとなく理解できます。 それと、SetClass内での On Error Resume Next ですが、これはどんな場合にエラーを拾うと想定されているのでしょうか?