|
おはようございます。
ActiveXControlの作成・削除(貼付けも含む)ことによる
データ初期化のタイミングの問題だと思いますよ!!
新規ブックの標準モジュールにて
'================================================
Private a As Long
Sub main()
a = 15
ActiveSheet.OLEObjects.Add _
ClassType:="Forms.CommandButton.1", Link:=False, _
DisplayAsIcon:=False, Left:=[a1].Left, _
Top:=[a1].Top, Width:=[a1].Width, _
Height:=[a1].Height
MsgBox a
'ActiveXControlが作成された直後、変数aの値は、ちゃんと設定値を保持している
Application.OnTime Now(), "subproc"
End Sub
'======================================================================
Sub subproc()
MsgBox a
'Ontimeメソッドによって、起動されたSubprocでは変数aは、0 初期化されている
End Sub
上記のmainを実行すると
ActiveXControlを動的に作成したmainのプロシジャーが終了するまでは、
変数aの値は保持されています。
が、mainのプロシジャーが終了してOntimeメソッドにより直ちに実行されたSubprocでは、既に変数aの値は、初期化されています。
Ontimeメソッドの実行は、
Private a As Long
Sub main()
a = 15
ActiveSheet.OLEObjects.Add _
ClassType:="Forms.CommandButton.1", Link:=False, _
DisplayAsIcon:=False, Left:=[a1].Left, _
Top:=[a1].Top, Width:=[a1].Width, _
Height:=[a1].Height
MsgBox a
End Sub
Sub subproc()
MsgBox a
End Sub
上記のmainを実行した直後に手動操作でsubprocを実行することと同じです。
つまり、デザインモードになる
(正確には、三角定規のアイコンをクリックし、デザインモードにしてから、再度
三角定規のアイコンをクリックし、デザインモードを終了するという
操作を行った効果)のは、
ActiveXControlの作成・削除(貼付けも含む)を行った
プロシジャーの実行が終了した時点で発生する ということです。
よって、うにボンバーさん事例に戻すと
モーダルモードでは、
>いくらでもCopy & Paste出来てしまう
のは、モーダルモードでは、
コマンドボタンクリックする時点では、
プログラムの制御は、Showメソッドのラインで止まったままです。
sub main()
userform1.show
ens sub
つまり、
ActiveXControlの作成・削除(貼付けも含む)を行った
プロシジャーの実行が終了していません。
つまり、ボタンクリックという操作の時点では、まだmainは終了していないのです。
よって、コピー&ペーストが可能になります。
デザインモードになっていないのですから・・・。
これが、モーダレスモードでユーザーフォームを表示させると、
sub main()
userform1.show Vbmodeless
end sub
mainの実行が終了してから、コマンドボタンクリックされる
という流れになります。
既にmainプロシジャーの実行が終了した時点で
ActiveXControlの作成・削除(貼付けも含む)を行いますから、
CommandButton1_Click()の実行が終了して時点で
デザインモードになりますから、ユーザーフォームが消えてしまいます。
又、
Private Sub CommandButton1_Click()
Sheet1.CheckBox1.Copy
Sheet1.Paste Sheet1.Range("C4")
UserForm1.Show vbModal
End Sub
これに関しては、
ActiveXControlの作成・削除を行ったCommandButton1_Clickが
未だ終了していない時点での
UserForm1.Show vbModal
ですから、
「フォームは既に表示されているので・・・」
のエラーが発生するのです。
以上ですが、デザインモードなる時期(タイミング)の問題だと思います
|
|