• 締切済み

.NETでのエラー処理方法について

またまたお世話になります。 VB.NETでおおよその動作を確認して、今データ入力時のエラートラップにかかっています。 2つのコンボボックスに開始時間と終了時間を入力するようにしており、終了時間のコンボボックスがフォーカスを失ったときに  If 入力時間 > 終了時間 Then messagbox.show("時間がおかしいよ!") ComboBox1.Focus() End If というチェックをかけています。 実際には"時""分"をそれぞれコンボボックスから2バイトのテキストで入力させ、数値換算して大小比較をさせる式を使って判断させています。 メッセージ表示後に入力時間のコンボボックスにフォーカスを戻してもコンボボックス2はフォーカスがないのでずっと繰り返ししつこくメッセージが出続けます。 (当たり前ですよね) 修正するためにこのメッセージを停止する、あるいは計算ルーチンを抜けるにはどうしたらいいのでしょうか? (実際に修正が出来るようにするには??) チェックの考え方が間違っているのかもと思いますが、それも合わせてよろしくお願いいたします。

みんなの回答

noname#187541
noname#187541
回答No.1

こんにちは。 入力時間と終了時間の両方に入力がないと比較しても意味がないように思います。 ですので、コンボボックス1の入力チェックをするときに最初にコンボボックス2に入力があるかどうかをチェックするようにするといいかと思います。 どうでしょうか?

danchor
質問者

お礼

フォーカスの戻り場所を変えて自己解決しました。 お騒がせいたしました。 ありがとうございました。

danchor
質問者

補足

ありがとうございます。 少し説明不足なところもありましたので補足させていただきます。 入力画面には (1)日付 (2)開始時間と終了時間 (3)開始時の数字と終了時の数字 があり、みな同じロジックで(1)は今日の日付と比較して未来入力禁止を、(3)は終了の数字の方が大きくなければエラーメッセージを出して再入力もうまくいくのですが、(2)だけが引っかかっています。 時間の誤入力を避けるためのチェックですから両方入力された時点でないと意味がないのです。 そして必ず開始時間より終了時間の方が遅くなければなりません。 間違った入力をそのまま通さないようにしたいのです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA 一つ前の動作を無効にするには??

    エクセル2002使用です。 ユーザーフォームにコンボボックス1、コンボボックス2のを2つ並べました。 コンボボックス2はコンボボックス1の値によって違う値を取得するため、 コンボボックス1に必ず入力がなければなりません。 そこで Private Sub ComboBox2_DropButtonClick() If ComboBox1.ListIndex = -1 Then MsgBox "コンボボックス1を入力してください" End If end sub としましたが、DropButtonClickの動作は有効なので、 メッセージボックスを閉じると、適当な値(今回はコンボボックス2設定のの一番最初の値)を 表示してしまいます。 DropButtonClickの動作を無効にする方法がわかりません。 よろしくお願いします。

  • EXCEL VBA----ユーザーフォーム 入力もれ防止

    ユーザーフォームで入力画面を作成し 項目入力後、実行ボタンでEXCELファイルにデーターを転記 →ユーザーフォームの全表示データを空白にする。 →終了ボタンで、ユーザーフォームを閉じる と言う処理で ユーザーフォームに入力段階で、必須項目に入力(選択)漏れがあると メッセージを表示させて入力を促したいのですが Private Sub Combobox19_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Combobox19 = "" Then msgbox "処理区分を選択して下さい。" Cancel=True End If 上記のようにすると、最後に終了ボタンを押した時にも メッセージが出てしまいます。 Exitを Keydownにすると、うまく行ったのですが メッセージ表示後、Combobox19にフォーカスしたいのですが 次のboxにフォーカスしてしまいます...。 何か良い方法がありましたら、お教え下さいませ。 わかりづらいかもしれませんが、よろしくお願いします。

  • DBカラムをコンボボックスに設定する方法

    VB初心者ですみませんが、どなたか教えてください。 以下のようにADOにてDBのカラムからデータを取得し、コンボボックスに設定をしたいのですが、よくわかりません。 コンボボックスのはじめに空白→DBの項目を設定→最後に”なし”を設定したいのですが、教えてください。 Dim adors As New ADODB.Recordset adors.Open "SELECT A_FIELD FROM TABLE",・・・・ If adors.RecordCount <> 0 Then ComboBOX.AddItem ("") 'コンボボックスのはじめに空白を設定 Set ComboBOX.RowSource = adors ComboBOX.MatchEntry = dblExtendedMatching ComboBOX.ListField = "A_FIELD" ComboBOX.AddItem ("なし") 'コンボボックスの終わりにに’なし’を設定 End If

  • Excel VBAでフォーカスを移動しない方法の続き

    質問番号:5013953でフォーカスを移動しない方法を質問し、解決しました続きの質問です。 Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If ComboBox1.Value = "" Then MsgBox "値が不正です。", vbInformation, "フォーム名" Cancel = True End If End Sub この場合、コンボボックスをExitで移動しなくしたまでは良かったのですが、 これによって他の部分で不具合が生じたので再度質問させてください。。 フォームにデータを入力中に中断する必要が出た場合、コマンドボタンで[終了]をつくったのです。 Private Sub 終了cmd_Click() End End Sub このコードでは先のコードの影響で終了することができないのです。 これを解決する方法を教えてください。

  • エクセル VBA if構文

    毎度お世話になります。 下記プログラミングですが、 シャーペンまたはボールペンがコンボボックス1で 選択された場合はコンボボックス2で10束または50束の選択肢となり 消しゴムまたはシャー芯がコンボボックス2で 選択された場合はコンボボックス2で100コまたは1000コの選択肢としたいのですが 他の方法がありますでしょうか。 宜しくお願い致します。 If Me.ComboBox1.Value = "シャーペン" Or Me.ComboBox1.Value = "ボールペン" Then ComboBox2.Style = fmStyleDropDownCombo ComboBox2.RowSource = "" ComboBox2.Clear ComboBox2.AddItem "10束" ComboBox2.AddItem "50束" ComboBox2.ListIndex = -1 End If If Me.ComboBox1.Value = "消しゴム" Or Me.ComboBox1.Value = "シャー芯" Then ComboBox2.Style = fmStyleDropDownCombo ComboBox2.RowSource = "" ComboBox2.Clear ComboBox2.AddItem "100コ" ComboBox2.AddItem "1000コ" ComboBox2.ListIndex = -1 End If

  • 複数のコンボボックスのドロップダウン表示

    ユーザーフォームにテキストボックス2個の後にコンボボックス2個を縦に配置し、上から入力していき一つ目のコンボボックスはEnterイベントでドロップダウン表示できるのですが 項目をクリックし選択した後 次のコンボボックスに移り同じようにドロップダウン表示したいのです。 コードは簡単に書くと以下のような感じです Private Sub ComboBox1_Enter() ComboBox1.DropDown End Sub Private Sub ComboBox1_Change() ComboBox2.SetFocus End Sub Private Sub ComboBox2_Enter() ComboBox2.DropDown End Sub で処理しようとするとフォーカスは移っている様なのですが、ドロップダウン表示されずカーソルのみ表示された状態になるのですが。 どうにか出来ないものでしょうか? お願いします。 Excel2003 使用しています。

  • ExcelVBAコンボボックス選択時の処理

    ExcelVBAで教えて下さい。 ユーザーフォームを作成しているのですがその中の機能の一部で、「コンボボックスを選択した内容に応じてラベルに表示させる」ということをしたいのですがうまくいきません。 コンボボックスにはSheet2の内容を表示するようにさせています。 Private Sub ComboBox_DropButtonClick() Dim i As Integer Dim LastRow As Integer With ComboBox LastRow = Cells(Row.Count, 1).End(xlUp).Row For i = 3 To LastRow .AddItem Worksheets("Sheet2").Cells(i, 1).Value Next i End With End Sub Sheet2の1列目には「2002年_H14」「2003年_H15」という書式で「2012年_H24」まで入力されています。 For i = 3 To LastRow としたのは、コンボボックスから選択した結果をラベルに表示させるとき、選択した年の前後2年を合わせた合計五年間を「2002~2006年」と表示したいためです。 <例> ・コンボボックスで「2004年_H16」選択   ↓ ・ラベルに「2002~2006年」と表示 コンボボックスのChangeコードはコンボボックスに入っている値が数字だったのみしか書けませんでした。 Private Sub ComboBox_Change() Dim i As Integer With ComboBox If .ListIndex = 0 Then i = .List(ListIndex, 0) Label.Caption = (i - 2) & "~" & (i + 2) & "年" End If End With End Sub もしくは Label.Caption = ComboBox.Value - 2 & "~" & ComboBox + 2 & "年" これだと「2002年_H14」というようにコンボボックスに入っていた場合はえらいになってしまい、どうにもなりません。うまくいったとしても「_H14」の取り除き方が分かりません。 実際に実現している画面を見せてもらったのですがコードまでは見てなく、仕組みが分からないのと、作成者不明という感じのものなので聞くに聞けずここに頼った次第です。 ご存じの方いらっしゃいましたらお知恵を拝借したく、何卒よろしくお願い致します。

  • 【Access】サブフォームの項目選択時、対応するコントロールの有効無効を制御する方法

    サブフォーム内にテーブル名tblのデータを帳票フォームで連結し、 サブフォーム内のチェックボックスをクリックすると、 対応するコンボボックスの有効無効を制御したい (ID=1のチェックボックスクリック時、ID=1のコンボボックスの有効無効を制御)と思いましたが、 どのチェックボックスをクリックしても、 ID=0~ID=2のすべてのコンボボックスが有効になったり、無効になったりしてしまいました。 【テーブル名:tbl】 ID, checkbox, combobox 0, false, A 1, true, B 2, false, C 【サブフォーム名のチェックボックスのクリックイベント】 Private Sub checkbox_Click() If Me.checkbox = True Then Me.combobox.Enabled = True Else Me.combobox.Enabled = False End If End Sub 何かしら添え字を渡す事ができれば、対応できるのではと思いましたが、 どのように記述すればよいか分かりませんでした。 その為、上記のような場合、個別で制御する方法をご存知の方がいらっしゃいましたら、 ご教示いただければと思います。 よろしくお願いします。

  • フォーカスの順番移動

    VBAで今フォーム1にテキストボックス2つ コンボボックス3つ上から順にあるのですが エンターキーまたはタブを押すと上から順番にフォーカスを移動させたいので すが、どうすればいいのでしょうか?プロパティの設定でできるのでしょうか ?今はタブキーを押すとばらばらの順番でフォーカスが移動します。なぜでしょう? ちなみにコントロールの名前は上から TextBox1、TextBox2、ComboBox1、ComboBox2、ComboBox3です

  • EXCEL VBA ユーザーフォーム内のテキストボックスを一括処理する方法について

    EXCEL VBAのユーザーフォームについて質問があります。 ユーザーフォームを作り、その中にコンボボックスを1個、テキストボックスを100個設置する。 コンボボックスの値が1のときはテキストボックス1~テキストボックス50までのEnabledをFalseに設定し、 コンボボックスの値が2のときはテキストボックス1~テキストボックス100までのEnabled をFalseに設定する。 このとき、TextBox1.Enabled = False、TextBox2.Enabled = False・・・と一つ一つ書いていくのではなく、 セルを処理するときと同様に、テキストボックスの番号を変数にして処理することは可能でしょうか。 Private Sub ComboBox1_Change()  Dim i As Integer   If ComboBox1.Value = 1 Then   For i = 1 To 50   TextBox(i).Enabled = False   Next i   ElseIf ComboBox1.Value = 2 Then   For i = 1 To 100   TextBox(i).Enabled = False   Next i   End If End Sub というような処理をイメージしているのですが、うまくいきません。どうぞよろしくお願いいたします。