| 
    
     |  | kayu さん、Jaka さん おはようございます。 
 >
 >すみません。説明が足りませんでした。
 >入力は1回だけじゃなくて、最低10回ぐらいあり、そのうちどこで起こっても
 >中止できるようにしたいのです。この方法だとその都度if…thenをしないと
 >いけないので…すみません
 >実行エラーでしようとしたのですがフレームモジュールから、標準モジュール
 >へうまく連携が取れなくて断念しました。
 
 正直、まだはっきりと仕様が把握出来ません。
 よって、想像がかなり入っています。
 
 新規ブックにて
 ユーザーフォーム(Userform1)に
 テキストボックスを10個作成してください。
 テキストボックス名は自動作成されるTextbox1〜Textbox10
 を使用します。
 
 以下に示すmainプロシジャーを実行すると
 
 ・このUserform1が表示されます。
 
 ・Textbox1〜Textbox10のテキストボックスが入力可能になっています。
 
 ・このTextbox1〜Textbox10のどのテキストボックスでも「9999」が入力されると
 Userform1は初期化表示します。
 
 ・プログラムは、ユーザーフォームの「X」ボタンのクリックで終了します。
 
 ではコードです。
 
 まず、クラスモジュール(クラス名は自動作成される「Class1」)
 
 '==================================================================
 Private WithEvents txt As MSForms.TextBox
 Private id As Long
 Private pa_obj As Object
 '==================================================================
 Private Sub txt_change()
 If txt.Text = "9999" Then
 pa_obj.hidemode = 0
 pa_obj.Hide
 End If
 End Sub
 '====================================================================
 Sub set_controls(idx As Long, obj1 As MSForms.TextBox, obj2 As Object)
 Set txt = obj1
 id = idx
 Set pa_obj = obj2
 End Sub
 
 
 次にUserform1のモジュール
 
 '======================================================================
 Public hidemode As Long
 ' 0---9999が入力された  1----閉じるボタンが押された
 Private ctrl(1 To 10) As Class1
 '======================================================================
 Private Sub UserForm_Initialize()
 Dim idx As Long
 For idx = 1 To 10
 Set ctrl(idx) = New Class1
 With ctrl(idx)
 .set_controls idx, Controls("textbox" & idx), Me
 End With
 Next
 End Sub
 '======================================================================
 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 If CloseMode = 0 Then
 Cancel = True
 hidemode = 1
 Me.Hide
 Else
 Erase ctrl()
 End If
 End Sub
 
 
 最後に標準モジュールに
 
 '======================================================================
 Sub main()
 Do
 Unload UserForm1
 UserForm1.Show
 Loop Until UserForm1.hidemode = 1
 Unload UserForm1
 End Sub
 
 
 以上です。mainを実行してみて下さい。
 
 
 上記のようなクラスモジュールの記述を私はもう本来はしませんが、
 今回はコードが短くなるので採用しました。
 
 |  |