• ベストアンサー

配列を使ってみたんですけど

Textboxが20個あってこの中で1つでもTextboxにテキストが入力されていればOKで、もしすべてのTextboxが空白(何も入力されない時は)Textboxに文字を入力するようにエラーを出したいのですが、配列を使ってやろうとしたのですが、なかなかうまく出来ません。 他に何かよい方法はありますでしょうか?教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Kai_PG
  • ベストアンサー率40% (2/5)
回答No.2

テキストボックス(任意の数)とコマンドボタンを1つだけ用意したフォームを作ってテストしてみました。 こんなのでどうでしょう? VB5.0で作成しました。 コマンドボタンが押されるときに、テキストボックスの中身をチェックする仕組みになっています。 Option Explicit Private Sub Command1_Click() MsgBox "Good Job!" End Sub Private Sub Form_Load() Dim i As Integer For i = 0 To Text1.UBound Text1(i).Text = "" Next i End Sub Private Sub Text1_LostFocus(Index As Integer) Dim i As Integer Dim blnFlg As Boolean If ActiveControl.Name = "Command1" Then blnFlg = True For i = 0 To Text1.UBound If Text1(i).Text <> "" Then blnFlg = False Exit For End If Next i If blnFlg Then MsgBox "Input Error" Text1(0).SetFocus End If End If End Sub

oohchan
質問者

お礼

こんにちは。早速ご回答ありがとうございました。 私が作ったコードでは、カウンタ内でフラグをたてているのに、 Exit For をしていませんでした。 修正して、動作確認しました。 これからもっともっと勉強していきたいと思います。 本当にありがとうございました。

その他の回答 (2)

  • qwerty
  • ベストアンサー率43% (20/46)
回答No.3

おはようございます。 蛇足ながら、なぜうまく行かなかったのかを 下のKai_PGさんのコードを例に考えてみます。 ポイントは判定ループ内ですが、 > For i = 0 To Text1.UBound >  If Text1(i).Text <> "" Then >   blnFlg = False >   Exit For >  End If > Next i (1)判定フラグをTrueで初期化しなかった。  (blnFlg = True)  これをやらないと、トラップできませんね。 (2)判定のIf文にElseをつけて blnFlg = False とやって、  Exit For をしていなかった。  せっかく入力済みのテキストボックスを見つけても、  次に空白があるとフラグが真になってしまいます。 すでにお分かりかと思いますが、丸写しではなく、 是非oohchanさんがお書きになったコードと比較されて、 どこが悪かったのかをお考えになって、 そのコードを修正するようにしてみましょう。 oohchanさんのスキルアップの少しでもお役に立てたら幸いです。

oohchan
質問者

お礼

こんにちは。早速ご回答をありがとうございました。 私が作ったコードでは (2)でご指摘いただいた通り、Exit Forをしていませんでした。 修正して、動作確認できました。 本当にありがとうございました。これからどんどん勉強していきたいと 思います。

  • Kai_PG
  • ベストアンサー率40% (2/5)
回答No.1

配列をどのように使おうとされたのでしょうか? どこでどう使っているかによってアドバイスが変わってきますので、お願いします。 たとえば、不明だと思われる点ですが、「テキストの入力チェックのタイミング」です。どのタイミングでチェックしたいのでしょうか? コマンドボタンを押したときでしょうか? テキストボックスからフォーカスが移動した瞬間でしょうか? 補足をお願いいたします。

関連するQ&A