1回で済ませるには?

解決


悩み人  2004-05-10 21:47:35  No: 83294  IP: [192.*.*.*]

If txtNo1 = "1" Or txtNo1 = "2" Then
            MsgBox "項目名:"1" & vbNewLine & "入力必須", _
                    vbOKOnly + vbExclamation, "TEST"
            txtNo1.SetFocus
            Exit Sub
    End If

    If txtNo2 = "1" Or txtNo2 = "2" Then
            MsgBox "項目名:"2" & vbNewLine & "入力必須", _
                    vbOKOnly + vbExclamation, "TEST"
            txtNo2.SetFocus
            Exit Sub
    End If

    If txtNo3 = "1" Or txtNo3 = "2" Then
            MsgBox "項目名:"3" & vbNewLine & "入力必須", _
                    vbOKOnly + vbExclamation, "TEST"
            txtNo3.SetFocus
            Exit Sub
    End If

これを別のやり方でやるにはどのようにしたらよいでしょうか?
例えばループなど。
何回も同じ事を書かない方法が知りたいのです。。。
あさからず〜っとやっておりますがなぞがとけません。

編集 削除
oku  URL  2004-05-10 22:55:07  No: 83295  IP: [192.*.*.*]

テキストボックスをコントロール配列にするとか?

    Dim intIndex        As Integer
    
    With txtNo
        For intIndex = .LBound To .UBound
            If txtNo(intIndex).Text = "1" Or txtNo(intIndex).Text = "2" Then
                    MsgBox "項目名:" & intIndex & vbNewLine & "入力必須", _
                            vbOKOnly + vbExclamation, "TEST"
                    txtNo(intIndex).SetFocus
                    Exit Sub
            End If
        Next intIndex
    End With

もしくはクラスでラッピングするとか?

編集 削除
悩み人  2004-05-11 07:10:09  No: 83296  IP: [192.*.*.*]

う〜ん、、、名前がそれぞれ違うのですが、、、可能なのでしょうか?<コントロール配列
あと1個言い忘れたのは項目名txtNo毎に違います。

引数にコントロール名と項目名を使ったら良いと言うような事はどこかで見たのですが。。。

テキストの名前を挙げるなら
txtX,txt2,txt3,txt4,txtA

みたいな感じなのです。

度々申し訳ございません。

ラッピング。。。と申しますと?

編集 削除
GOD  2004-05-11 10:00:30  No: 83297  IP: [192.*.*.*]

http://www2j.biglobe.ne.jp/~little-g/cgi-bin/choshoqa.cgi
↑の2029の一連の投稿が役に立つのでは?
MsgBoxで項目名の番号が変わるならTagにでも番号を設定しておけばいいのかな。

編集 削除
魔界の仮面弁士  2004-05-11 10:11:55  No: 83298  IP: [192.*.*.*]

> う〜ん、、、名前がそれぞれ違うのですが、、、可能なのでしょうか?<コントロール配列
統一させるとか。


> 引数にコントロール名と項目名を使ったら良いと言うような事はどこかで見たのですが。。。
「MsgBox MsgBox CallByName(Me, "Text1", VbGet).Text」とか、
「MsgBox Form1.Controls("Text1").Text」などの構文を使って、
コントロール名を文字列で渡す事はできます。

  For Each V In Array("txtX", "txt2", "txt3", "txt4", "txtA")
      MsgBox Me(V).Text
  Next


> あと1個言い忘れたのは項目名txtNo毎に違います。
? これは意味が良く分かりませんが、とりあえず最初の例なら、

  For Index = 1 To 3
    Set txt = Controls("txtNo" & CStr(Index))
    If txt.Text Like "[12]" Then
      MsgBox "項目名:" & StrConv(Index, vbWide) & vbNewLine _
           & "入力必須", vbOKOnly Or vbExclamation, "TEST"
      txt.SetFocus
      Exit For
    End If
  Next
  Set txt = Nothing

などと書けるかな。

編集 削除
悩み人  2004-05-11 17:00:31  No: 83299  IP: [192.*.*.*]

ありがとうございます!

編集 削除