[[20031023132704]] 『テキストボックスが空白だったらメッセージ』(よ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『テキストボックスが空白だったらメッセージ』(よ)

ユーザーフォーム内のテキストボックスが空白だったらメッセージ。

いつもお世話になっております。また教えていただきたいことがありますので、よろしくお願いします。

ユーザーフォームを使用して表を作成することにしたのですが、ユーザーフォームにある項目はすべて必須項目なので、未入力個所があった場合メッセージを出したいと思っています。

安易に考えて、

If TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Then

MsgBox "未入力箇所があります。"

Else

処理内容

と言った感じにしてみたのですが、これだと再度入力し直した時もメッセージがでます。この方法だともう一度入力し直すところへ戻れない(うまく説明きませんが・・)ので、間違っていることはわかるのですが、ではどうしたら良いかのというとさっぱり思いつきません。どなたかアドバイスをいただけたらと思います。よろしくお願い致します。


 こんばんわ。
 TextBox1.Text="" Or TextBox2.Text="" と言った案配に書き換えてみておくんなはれ
 それでいけるとおもいまっせぇ。
    ほな...(おいぼれ 弥太郎)

 これ.Textを追加すればいいとか、そういう問題ではないのでは?

 そのIfのコードは何のイベントで実行してるの?
 たとえばTextBoxに入力後、CommandButtonを押すとIfでチェックして、
 表の方に入力するとかでいいのでは?

 (ramrun)

 おはようございます。
 >これ.Textを追加すればいいとか、そういう問題ではないのでは?
 Oh yes その通りですわ。
 (よ)サンのコードをそのまま活かすとすれば

 If TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Then
        GoTo kanemoto
 Else
    内容処理
 End If    
 Exit Sub

 kanemoto:
    MsgBox "未入力セル"
    If TextBox1 = "" Then
        TextBox1.SetFocus
    End If
    If TextBox2 = "" Then
        TextBox2.SetFocus
    End If
    If TextBox3 = "" Then
        TextBox3.SetFocus
    End If
    If TextBox4 = "" Then
        TextBox4.SetFocus
    End If

 End Sub

 っちゅう案配に書き換えてみておくんなはれ。お望み通りになると思いまっせぇ。
 ただ、他にもエラーを組み込んどきたいもんがおますわなぁ。例えば数値を入力したい
 のに誤って文字列で処理してしもてそのままシートに転送してしまうとか...。
 その愚を避けるためにも一括したエラー処理をkanemotoさんに処理して貰う様に組んだ
 方が(フォームを初期状態に戻して再入力を待つ)ベターやと思いまんねんけど、どうで
 っしゃろか。第一TextBoxのいずれかが空のままCommandButtonが押されるっちゅう事は
 入力する順番(TextBox2に入力されるべきモンがTextBox3に入力される)が狂うとる事
 も大いに有るわけですさかいなぁ。
 まぁ、まぁ、それは余談として、又お分かりになりまへんでしたらご一報おくんなはれ
   ほな...(おいぼれ弥太郎)

(おいぼれ弥太郎)さん、(ramrun)さん、どうもありがとうございます。お礼が遅くなりました・・。

とりあえず.Textを試してみたのですが、やはりうまくいきませんでしたので、(おいぼれ弥太郎)さんのコードを参考にさせていただいて、何とかやってみたいと思います。また、>例えば数値を入力したい のに誤って文字列で処理・・については、前に教えていただいたIMEModeの設定にて何とか規制しております。ありがとうございました!(よ)


度々すみません。今さっそく試してみたのですが、未入力の際にメッセージが出て、そのテキストボックスにSetFocusはされますが、本来の質問の部分の解決にはなりませんでした。わたしの質問の仕方が悪いのかもしれません(涙)

今はCommandButton_Click()でやっています。今の状態だと、未入力箇所を再入力した後も、未入力ですとメッセージがでます。何か他におかしいところがあるのでしょうか?今1時間ほど悩んでおりましたがさっぱりわかりません。もうしばらく考えてみますが、もし何か解決法がありましたらアドバイスお願い致します。(よ)


質問を少し直させていただきました。(よ)

わーん、だんだん混乱してきました。今四苦八苦していましたら、すべて入力しても未入力のメッセージがでるようになってしまいました。もう一度落ち着いて考えたいと思います。(よ)

 どこが悪いのか検討つきませんが、Ifの条件は最初ので
 とくに間違っていないと思います。

 CommandButton_Click()

 If TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Then 
     MsgBox "未入力箇所があります。" 
 Else 
     処理内容
       表に出力
       次のレコードへポインタを進める
 End IF

 End Sub

 実はユーザーフォーム上に作成しているTextBoxが1,2,3,4ではなく、
 作り変えたりしているうちに1,3,4,5とかになっている〜 とかいうオチ。

 (ramrun)お昼〜

 ramrunさんフォローおおきに。
 また、先だっては絶大なるカバーリング、抱きしめたい程(いや?)感謝しております

 (よ)さん、まぁ、落ち着いて、落ち着いて。
 ほんなら弥太郎流ユーザーフォームを仮に作ってみましたさかい、それ参考になさって
 みておくんなはれ。TextBox4個と、CommandButton2個とします。
 これでマウスをさわらんでも全ての作業が可能ですわ。
 入力が全て終了したらセットフォーカスがTextBox1に移っとる筈ですさかい、空で
 Enterキーを叩いたらCommandbutton2にフォーカスが移り、またEnterキーでフォームが
 とじます。
 この通りせんでもよろしいから、必要なトコだけとりあげておくんなはれ。
 今日は1日居りますさかい、又わからんことあったら呼び出してくだはれや。
   (任せてんかの 弥太郎)
 '-----------------
 Private Sub CommandButton1_Click()
    Dim i As Integer
    If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = _
                "" Or TextBox4.Text = "" Then
        GoTo kanemoto
    End If
    i = rowno
    Cells(i, 1) = TextBox1.Text
    Cells(i, 2) = TextBox2.Text
    Cells(i, 3) = TextBox3.Text
    Cells(i, 4) = TextBox4.Text
    crea
    CommandButton2.Enabled = True
    CommandButton1.Enabled = False
    Exit Sub
 kanemoto:
    MsgBox "入力がちゃいまっせ。"
    crea
 End Sub
 '---------------
 Sub crea()
    TextBox1.Text = ""
    TextBox2.Text = ""
    TextBox3.Text = ""
    TextBox4.Text = ""
    TextBox1.SetFocus
 End Sub
 '---------------- 
 Function rowno() As Integer
    Dim i As Integer
    Do
        i = i + 1
    Loop While Cells(i, 1) <> ""
    rowno = i
 End Function
 '-----------------
 Private Sub CommandButton2_Click()
    Unload Me
 End Sub
 '--------------------
 Private Sub TextBox1_Change()
    CommandButton1.Enabled = True
    CommandButton2.Enabled = False
 End Sub
 '----------------------
 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal  Shift As Integer)
    If KeyCode = vbKeyReturn Then
        If TextBox1.Text = "" Then
            CommandButton2.Enabled = True
            CommandButton2.SetFocus
        End If
    End If
 End Sub
 '---------------------
 Private Sub UserForm_Initialize()
    CommandButton1.Enabled = False
    CommandButton2.Enabled = False
 End Sub

勝手に一人で混乱しているのに暖かく見守ってくださり、本当に感謝しております。結局、全て入力してもメッセージが出たのは(ramrun)さんのおっしゃる通り、初歩的なミスでした。

お二人の書いてくださったものを参考にさせていただき、がんばってみます。本当にありがとうございます。わたしもVBAを独学で始めて半年ですが、このサイトでたくさん勉強させてもらい、今では工数削減に貢献できるようになりました。(その割にいつも初歩的なことをお聞きしていますが。。)これからもいろいろと勉強させていただきます。余計なことを書きましたが、まずはお礼まで。(よ)


弥太郎さん、ramrunさん、試してみました。うまく行きそうです。本当にありがとうございました。(よ)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.