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

他に何かよい方法はありますでしょうか?教えてください。
よろしくお願いします。

A 回答 (3件)

テキストボックス(任意の数)とコマンドボタンを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
    • good
    • 0
この回答へのお礼

こんにちは。早速ご回答ありがとうございました。

私が作ったコードでは、カウンタ内でフラグをたてているのに、
Exit For をしていませんでした。

修正して、動作確認しました。
これからもっともっと勉強していきたいと思います。

本当にありがとうございました。

お礼日時:2001/03/22 13:13

おはようございます。



蛇足ながら、なぜうまく行かなかったのかを
下の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さんのスキルアップの少しでもお役に立てたら幸いです。
    • good
    • 0
この回答へのお礼

こんにちは。早速ご回答をありがとうございました。

私が作ったコードでは
(2)でご指摘いただいた通り、Exit Forをしていませんでした。

修正して、動作確認できました。
本当にありがとうございました。これからどんどん勉強していきたいと
思います。

お礼日時:2001/03/22 13:07

配列をどのように使おうとされたのでしょうか? どこでどう使っているかによってアドバイスが変わってきますので、お願いします。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB2005 TextBoxに何も入力しない場合のエラー

VB入門者なので、よろしくお願いします。
VB2005で、Textboxに何も文字を入力しないで
Button1をクリックしたら、
 MessageBox.Show("何か入力してください", "エラーメッセージ")
の様に何かエラーメッセージが表示されるようにしたいのですが、何かいい方法はありますか?
ちなみにTextboxに入力するものは、ひらがな、数字、漢字、ローマ字
なんでも入力できるようにしています。

Aベストアンサー

Button1のクリックイベント内に
If TextBox1.Text.Length = 0 Then
 MessageBox.Show("何か入力してください", "エラーメッセージ")
End If
あたりかな。

QVBA 配列計算について 配列の入力に配列の使用

配列に複数のセル値の合計値を設定したいと思っています。
求める合計値は複数あるため、出力も配列となります。
そこで下記のようにプログラムを考えたのですが、全て同じ値の配列として出力されてしまいます。
VBAではC言語のように配列の古い値に足していくことはできないのでしょうか?

(sum()は0で初期化) (10個飛ばしのデータの合計値を算出)
For i = 0 To 10
For j = 0 To 5
sum(i)= sum(i) + Worksheets(sheetname).Cells(10, 3).Offset(j * 10, 0).Value
Next i
Next j

出力配列例 全て同じ値になってしまいます・・・
1.254
1.254
1.254
・・・

回避方法もしくはうまい計算方法などありませんでしょうか

Aベストアンサー

なにを計算したいんでしょうか?

このコードでは、どのSum(i)にも、
Cells(10,3).Value + Cells(20,3).Value + ・・・・ + Cells(60,3).Value
の値が入るから、同じになるのは当然です。

i ごとにSum(i)を変えたいのなら、
Worksheets(sheetname).Cells(10, 3).Offset(j * 10, 0).Value
の中のどこかに i が入ってないと・・・・

Qwebbrowserで配列になっているtextboxへの値の代入

VB6/VBAのwebbrowserで配列になっているtextboxへ
値を代入したいと思います。この場合の指定はどの
ようにすればいいのでしょうか?

<input type="text" name="products_name[1]">

<input type="text" name="products_name[2]">

こんな感じです。

Aベストアンサー

どこまでコードが出来ているのかわからないので要点だけ。

Dim doc As HTMLDocument

'(ここにブラウザのHTMLDocumentを取得するコード)

doc.getElementsByName("products_name[1]").item(0).value = "NewValue1"
doc.getElementsByName("products_name[2]").item(0).value = "NewValue2"

または
doc.forms(0).item("products_name[1]").value = "NewValue"


ところで、name属性でこのような書式ははじめてみたのですが、これって配列として認識されているのでしょうか?

<input type="text" name="products_name">
<input type="text" name="products_name">
このように同じnameであれば配列として扱われますが・・・。

Q.net 2010VB配列TextBox貼り付ける

初めて質問致します。
よろしくお願い致します。
超初心者レベルです。

VB6の時に、Formにテキストボックスやラベルなどを1つ貼り付け、それをコピーすると「配列にするか?」と聞かれていました。

今、.net 2010 VB でテキストボックス(ラベル)をコピーしても、配列にするかどうか聞いてくれません。

プログラム等ではなく、手動でFormに貼り付け時に、配列にする方法を教えて下さい。
(どのプロパティが、配列のインデックスなのかが分かりません。)


<(__)>

Aベストアンサー

こんにちは。

>私が配列にこだわるのは、下記のようなことをしたいからです。
>For inti = Text1.LBound To Text1.ubound
>Text1(inti).Text = "TEXT" & CStr(inti)
>Next inti

こんな感じかな。

'配列を定義する
Private Text1 as TextBox()

Form_Loadイベントに

' 新しいインスタンスを生成する
Me.Text1 = New TextBox() {Me.TextBox1,Me.TextBox2,Me.TextBox3,Me.TextBox4....} '←配列に使用する順に追加

For inti as Integer = LBound(Text1) to UBOund(Text1)
Text1(inti).Text = "TEXT" & CStr(inti)
Next

Q複数個のTextBoxでいずれかの内容が変更された事の把握

Visual Basic 2008でのプログラミングです

TextBoxを縦横5個づづ並べて、それぞれにテキストを表示させておいて、いずれかのTextBoxが変更された場合、各TextBoxのTextChangedイベントで処理するのでしょうが、25個のうちいずれかが変更されたことをまとめて検出する方法はないものでしょうか?

ご教示お願い致します。

Aベストアンサー

わたしはVB2005なのですが・・・
TextBox1~TextBox25まであったとすると
TextBox1のTextChangedイベントのHandles TextBox1.TextChanged を下記のように
Handles TextBox1.TextChanged, TextBox2.TextChanged, TextBox3.TextChanged, TextBox4.TextChanged, TextBox5.TextChanged・・・としたら
どのテキストボックスを変更しても このイベントが発生します。


人気Q&Aランキング

おすすめ情報