[[20170316205306]] 『[書き直し]モーダレスモードで動的コントロールの』(misskabu) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『[書き直し]モーダレスモードで動的コントロールのイベントを発動させたい』(misskabu)

先ほど質問を纏める様にご指摘いただきましたので
テストコードを作って動作確認の上再掲いたします。

以下のようにボタンを動的に生成したいのですが、
makeForm1()のようにvbModalでフォームを呼ぶと
myButton_Click()イベントが発生しますが、
makeForm2()のようにvbModelessだと動きません。
モーダレスモードで動的コントロールのイベントを
発動できないものでしょうか?

'UserForm1はコードも実行前のプロパティも一切手を加えていません。
'/////////////////////////////////////////////////////
'Class1
Option Explicit

Public WithEvents myButton As CommandButton

Private Sub myButton_Click()

    Debug.Print "ボタンが押されました"
    MsgBox "ボタンが押されました"
End Sub

'//////////////////////////////////////////////////
'標準モジュール
Option Explicit

Public Sub makeForm1()

    Dim newButton As New Class1
    Dim btn As Control
    Set btn = UserForm1.Controls.Add("Forms.CommandButton.1")
    Set newButton.myButton = btn
    UserForm1.Show vbModal
End Sub

Public Sub makeForm2()

    Dim newButton As New Class1
    Dim btn As Control
    Set btn = UserForm1.Controls.Add("Forms.CommandButton.1")
    Set newButton.myButton = btn
    UserForm1.Show vbModeless
End Sub
'/////////////////////////////////////////////////////////

< 使用 Excel:Excel2007、使用 OS:Windows10 >


Dim newButton As New Class1 をプロシージャ単位ではなくモジュール単位で宣言して下さい。私のほうでは動きました。
プロシージャ単位ではモードレスだとプロシージャが走り終わってしまって、存在しなくなるかと思います。
(名無し) 2017/03/17(金) 09:29

名無しさんの言う通りにメンバ変数に変えたら動きました!
ありがとうございます!
見た目にはボタンが存在していたのでインスタンスが消えているなんて
思いもしませんでした。

(misskabu) 2017/03/17(金) 20:03


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.