|
MPUS さん、でれすけさん、BOTTAさん、こうちゃん、つんさん。
みなさん、こんにちは。
大変参考になる情報をありがとうございました。
BOTTAさん、こうちゃん、つんさん。
ありがとうございました。再現性があるバグ?だと認識できました。
でれすけさん、初めまして、ご回答ありがとうございます。
>ichinoseさんが提示されたマクロをステップ実行すると、
>コマンドボタンを追加するところで、
>「中断モードでは入力出来ません」とメッセージがでて、
>実行が終了します。
>私の経験では、こういうときは変数が初期化されます。
↑このご経験、別の事象の「変数の初期化」を探る時に参考になりそうです。
手動でActiveXControlを貼り付けるときにデザインモードになりますよね。
デザインモードに入った時点で変数は初期化されます。
これがAddメソッドにも影響を及ぼしているというようなバグかな?等と考えていました。
MPUSさん、初めまして。
ご回答ありがとうございます。
>コントロールツールボックスのaddは変数を初期化してしまう仕様(バグ)の
>ようですね。
>シートでコントロールツールボックスを用いるのは色々不都合の元みたいです。
↑ですね、でも、基本的には私、新しいもの好きなもので・・・。
>正確に言うとOLEObjects.Addしたシートのbookの変数を初期化するみたいです。
>従って、コードの書かれた以外のbookのシートにaddすると、変数は初期化されない
>のではないでしょうか?
実際には、作成したボタンのイベントモジュールが作れなかったので、この現象に
気が付いたのですが・・・。
ヒントになりました。ありがとうございます。
文字列変数や数値変数などは、これがバグだと分かれば、セルに保存するとして・・。
イベントプログラムやインスタンスを作成するブック(変数を保持するブック)とボタンを作成するブックを分けてしまおう と思いました。
仮に
ブックA.xlsがボタンを貼り付けるブックとします。
ブックB.xlsには、イベントプロシジャーやクラスのインスタンスを作成します。
ブックA.xlsは、ブックB.xlsを参照設定しておきます。
A.xlsの標準モジュールでは
'=============================================
Sub main()
Dim btn As OLEObject
Set btn = myclss.add_chkbtn(Range("a1"))
btn.Object.Caption = "感謝"
End Sub
これだけ。
B.xlsの標準モジュールには、
'====================================
Public myclss As New Class1
クラスモジュール(Class1)に
'=====================================
Public WithEvents cbt As CommandButton
'=====================================
Private Sub cbt_Click()
MsgBox "ok"
End Sub
'=============================================
Function add_chkbtn(rng As Range) As OLEObject
With rng
Set add_chkbtn = _
.Parent.OLEObjects.Add _
(ClassType:="Forms.CommandButton.1", Link:=False, _
DisplayAsIcon:=False, Left:=.Left, _
Top:=.Top, Width:=.Width, _
Height:=.Height)
Set cbt = add_chkbtn.Object
End With
End Function
とし、A.xlsのmainを実行し、作成されたボタンをクリックしたところ、
クリックイベントが作動してくれました。
実際には、B.xlsは、アドインにするか見えなくしておく等の処理が必要ですが・・。
こんなに大勢の方に回答を頂いたのに何も結果を残さないのでは・・と思い、
コードを記述しました。
みなさん、ありがとうございました。
追伸
このサイトで新規質問をしたのは、記憶違いでなければ、これで2回目です。
普段は、質問すら浮かばない・・・なので、他の方のご質問を勉強材料にさせて
頂いています。
前の質問したときは、説明が悪かったのか回答を頂けませんでした。
今回は、大勢の方からの回答を頂き、正直すっごくうれしいです。
繰り返しになりますが、本当にありがとうございました。
|
|