現在、エクセルVBAにて、エラーのチェックを行っているのですが、
他の数値項目は問題ないのですが、下記の個所のみ、
エラーメッセージが2回出力されます。
(1回目のExitSubがきかない)
お分かりになる方がおられましたら、ご回答、よろしくお願い致します。

'費用(明細1)
Private Sub txtMei4_1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Set mytxt = Me.Controls("txtMei4_1")
If mytxt.Text <> "" And _
IsNumeric(mytxt.Text) = False Then
MsgBox "数値を入力してください"
Cancel = True
Exit Sub ←ここで、Exitせず、もう一度このPrivate Subに戻ってくる
End If
End Sub

他のテキストでも同様のチェックをしているのですが、
この部分のみ、msgboxが2回出力されます。

申し訳ありません。
よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

Private Sub Textbox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)


MsgBox "aaa"
If TextBox1.Text <> "" And IsNumeric(TextBox1.Text) = False Then
MsgBox "数値を入力してください"
Exit Sub
End If
End Sub
と Cancel = True
を除くと1回しか通りません。入れると確かに2度とおる。
Cancel = Trueが行われる場合このイベントが再度発生しているのでしょう。
似たようなケースで、
Changeイベントなどでは、よくプログラムで値をセットするが、またイベントを起してしまうケースを経験します。
Application.EnableEvents = False
などを始めに入れたりする。
参考
http://oshiete.goo.ne.jp/qa/3037406.html
ーー
またテキストボックスは値をチェックする機会(タイミング)が難しいように思う。
安全なのは別のコマンドボタンをクリックしたとき行うことでしょうが、外に良い方法があるのかな。
そのほか前後で順次イベントが2重3重に起こるものもあるので、VBAの初心者はイベントを使うのは難しいと思う。
参考
http://www.geocities.jp/cbc_vbnet/kisuhen/Event. …
Eventの発生する順序
    • good
    • 0

[F8]キーでのステップ実行で、流れの確認をした上での質問でしょうか?


やってないのなら、やってみて、どのような流れでエラーメッセージが2回出力されているのかを分析しましょう。
きっと、あなたが想定しているものとは別の流れになっているはずです。

この回答への補足

ご回答ありがとうございます。

1ステップづつ何度も行っているのですが、
Exit Sub を通っているのに、「Exit Sub」のところで
もう一度、「Private Sub txtMei4_1_BeforeUpdate」に戻ってきます。

もしかしたら、フレーム内の最後の項目なので、
そのせいかなと思ってきました。

本当は、「Exit Sub」の前に、項目をクリアしたいのですが、
それをやると、今度は、カーソルがエラーを出したところに
出てこなくなりました。

てんやわんやです。

補足日時:2011/04/14 18:22
    • good
    • 0

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


人気Q&Aランキング

おすすめ情報