Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


46574 / 76732 ←次へ | 前へ→

【35128】Re:中止コードについて
発言  ichinose  - 06/2/22(水) 7:04 -

引用なし
パスワード
   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を実行してみて下さい。


上記のようなクラスモジュールの記述を私はもう本来はしませんが、
今回はコードが短くなるので採用しました。

2 hits

【35082】中止コードについて kayu 06/2/21(火) 10:56 質問
【35087】Re:中止コードについて Jaka 06/2/21(火) 11:50 回答
【35101】Re:中止コードについて kayu 06/2/21(火) 13:37 お礼
【35128】Re:中止コードについて ichinose 06/2/22(水) 7:04 発言
【35241】Re:中止コードについて kayu 06/2/24(金) 9:29 お礼

46574 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free