2016-12-31 12 views
0

異なるモジュールから異なる時間に2つの異なるユーザーフォームを呼び出す手順は混乱します。異なるユーザーフォームを順次ロードする

私は名前の次の二つのユーザーフォームを持っている:「UserForm1で」オン「のUserForm1」と「UserForm2は」、私もコードネームを持つ静的なボタンがあります。「プライベートサブUserForm_Clickを()」

フォームから潜水艦名前VIA

private sub OKButton_Click() 
msgbox("OKButton_Click via 1") 
End Sub 

Public Sub UserForm1_Initialize() 
msgbox("UserForm1_Initialize via 1") 
'dynamic form initialisation 
End Sub 

Private Sub UserForm_Click() 
msgbox("UserForm_Click via 1") 
End Sub 

:[UserForm1でに私がボタンを持っている]:

:UserForm1で:名で

:次のコードが含まれていUserForm2

Public Sub UserForm_Initialize() 
msgbox("UserForm_Initialize via 2") 
'dynamic form initialisation 
End Sub 

そして私は中2人のユーザーフォームを呼び出す:UserForm1ではうまく働いたときに最初私はUserForm2を追加し呼び出すことができなかった時に、私は、どちらか一方を呼び出したとき

Module57 
Sub Vitamins() 
UserForm2.Show 'Initialising Userform2 
end sub 

Module53 
Sub fix_ratios() 
UserForm1.Show 'Initialising Userform1 
end sub 

問題が発生したので、私は名前とコードを変更UserForm2の、新しいコードを作成しUserForm2のオブジェクトをダブルクリックすることで:

Private Sub UserForm_Initialize() 

End Sub 

だから私はそれがうまく働いた、そこにUserForm2を追加し初期化するための私のコードを貼り付けました。しかし、私は今、最初のUserFormから "UserForm_Initialize()"を盗むことに気付きました。

だから私はにサブネームを変更しようとした:

Public Sub UserForm1_Initialize() 

end sub 

Public Sub UserForm2_Initialize() 

end sub 

しかし、それはもうユーザーフォームを呼び出すことはありません。誰かが提案をしたり、私が間違っていることを教えてくれますか? 。tlemasterが提案よう

+1

UserFrom_Initializeサブフォームがそのフォームのコードに含まれている限り、他のフォームに応答していません。 initializeイベントはフォームのオープンに応答して実行されます。あなたが提案したように "UserFormsを呼び出す"ことはありません。一度に両方の書類を開こうとしていますか?その場合は、フォームのShowModalプロパティがFalseに設定されていることを確認します。 – tlemaster

+0

ありがとう、あなたは正しかった、私はサブの名前に矛盾していた。その結果、私は構造の理解を失い、技術的に見落としを修正しました。答えに解決策を掲載します。 –

答えて

1

溶液であった:

は、それが中に属する形で各フォームの別々のサブルーチンを有する(これは、「モジュールではなく、表示エディタの上面図でビジュアル - [ userFormx(コード)]

その上で、あなたが使用したら:。別のモジュールでuserformx.show、それは意志最初excecute:

Sub Userform_Initialize() 

そして、それはそれはuserformxが表示されます完了すると

の名前がSub Userform_Initialise()の場合、サブをエスケープしません。単純に非初期化サブが表示されます。

ユーザーフォームの「ビューオブジェクト」をクリックし、フォームテンプレートをダブルクリックした場合、それがコードに行く/生成します。

Sub userform(x?)_clicked() 

これもuserformxを表示する前に実行されません。その上で

、1は2つの同じ名前のサブルーチン持つことができます。その後、Excelが自動的に呼び出され、フォームの初期化を実行します限り、彼らは異なる「フォーム」/フォームのコードにあるよう

Sub Userform_Initialize() 

Sub Userform_Initialize() 

を任意の無関係なモジュールから: "UserformY.Show"

お楽しみください。

関連する問題