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
これを別のやり方でやるにはどのようにしたらよいでしょうか?
例えばループなど。
何回も同じ事を書かない方法が知りたいのです。。。
あさからず〜っとやっておりますがなぞがとけません。
テキストボックスをコントロール配列にするとか?
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
もしくはクラスでラッピングするとか?
う〜ん、、、名前がそれぞれ違うのですが、、、可能なのでしょうか?<コントロール配列
あと1個言い忘れたのは項目名txtNo毎に違います。
引数にコントロール名と項目名を使ったら良いと言うような事はどこかで見たのですが。。。
テキストの名前を挙げるなら
txtX,txt2,txt3,txt4,txtA
みたいな感じなのです。
度々申し訳ございません。
ラッピング。。。と申しますと?
http://www2j.biglobe.ne.jp/~little-g/cgi-bin/choshoqa.cgi
↑の2029の一連の投稿が役に立つのでは?
MsgBoxで項目名の番号が変わるならTagにでも番号を設定しておけばいいのかな。
> う〜ん、、、名前がそれぞれ違うのですが、、、可能なのでしょうか?<コントロール配列
統一させるとか。
> 引数にコントロール名と項目名を使ったら良いと言うような事はどこかで見たのですが。。。
「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
などと書けるかな。
ありがとうございます!
編集 削除