ユーザーフォームを閉じたい方法について

このQ&Aのポイント
  • ExcelVBAを使って作成したユーザーフォームで終了ボタンを押してもエラーメッセージが出てしまう場合、どうすればエラーメッセージを出さないようにできるのか疑問です。
  • ユーザーフォームの終了ボタンをクリックするとエラーメッセージが表示されてしまいますが、このメッセージを出さないようにする方法を教えてください。
  • ExcelVBAで作成したユーザーフォームで、終了ボタンを押してもエラーメッセージが表示される場合について知りたいです。エラーメッセージを出さないようにするにはどうすれば良いのでしょうか?
回答を見る
  • ベストアンサー

ユーザーフォームが閉じたいのですが

皆様こんにちは。 ExcelVBAを使ってユーザーフォームを作っています(初心者)。 どうしてもわからないので教えてください。 ちなみに、以下のように組んでいます。 Private Sub 商品区分txt_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If IsNumeric(商品区分txt) = False Then   MsgBox "商品区分は数値を入力してください", , "商品区分エラー"   Cancel = True   Exit Sub End If If 商品区分txt < 1 Or 商品区分txt > 100 Then   MsgBox "商品区分は1~100までの値で入力してください", , "商品区分エラー"   Cancel = True   Exit Sub End If End Sub 説明させていただくと、「単価変更」というボタンを配置しています。 そのボタンをクリックするとユーザーフォームが立ち上がります。 商品区分と単価変更率を入力するテキストボックスがあります。 両方を入力後「単価変更実行」というボタンを押すようになっています。 すると指定した商品区分の商品の単価が変更されるようになります。 ちなみに、「終了」ボタンもあります。 商品区分は1~100まであり、その範囲外の場合と数値以外が入力された場合はエラーメッセージがでるようになっています。 たとえば、商品区分に200を入力するとメッセージが出て次のコントロールにいけないようになっています。 そこで200を消します。そして、「とりあえず終了したい」となり、終了ボタンを押してもエラーメッセージが出てしまいます。 このメッセージは出したくありません。 出さないようにするにはどうしたらいいでしょうか? BeforeUpdateじゃなく何か別のイベントを選ぶといいのでしょうか? ちなみに、終了ボタンはUnload Meとしてあるので通常は閉じることは可能です。 長文ですみません。よろしくお願いします。

  • hy0423
  • お礼率88% (198/225)

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

商品区分txt_BeforeUpdateで 商品区分txtがクリアされた時にも、検知するからですよね。 クリアされてた時には、とりあえずエラーにならないようにして、クリアされているかどうかは「単価変更実行」ボタンで調べたらどうでしょう? (あるいは、クリアされた時には、デフォルトの値にするとか)

hy0423
質問者

お礼

BLUEPIXYさん、ありがとうございました。 お礼が遅くなり申し訳ございませんでした。 (自宅PCが壊れていてインターネットカフェで週に1度しかネットチェックできない為遅れました) やはりほかのイベントでも難しいんですかね。 BeforeUpdate時にエラーを回避するステートメントを 記入したいと思います。 まだトライしていませんが、取り急ぎお礼まで。 ありがとうございました。

関連するQ&A

  • ACCESSのフォーム

    ACCESSのフォームでデータを入力しています。 既に入力したデータを誤って上書きしないように、更新前処理で下記のコードを入れました。 Private Sub 単価_BeforeUpdate(Cancel As Integer) If MsgBox("変更を保存しますか?", vbYesNo) = vbNo Then Me.Undo End If End Sub 入力済のデータを上書きする時はこの方法で良いのですが、新規に入力する時にも同じように確認メッセージが出てしまいます。 新規入力の時には確認メッセージを出さない方法があったら教えて下さい。 よろしくお願いします。

  • エクセルVBAについて、ご教授お願いします。

    表を作成しました。      1 商品名 商品区分  単価     2 ミカン   1        \50  3 リンゴ  2         \80 4 モモ   8        \100  Msgboxに商品区分と単価上昇率を入力し、コマンドボタンの単価変更をクリックすると、 エクセル(商品区分、単価)のデータを読み下記の条件で実行します。 ------------------------------------------------------------------------------------ A.単位上昇率に関してエラーチェックを行います。 'B.エラーが見つかった場合にのみ、対象商品区分の単位上昇率を元にワークシート上の明細を更新する 'C.処理条件をメッセージボックスにて表示する。 ------------------------------------------------------------------------------------- どうしても思うような処理を作成できず悩んでいます。 良い方法をご存じの方がいらっしゃいましたら、どうかお教えください。 Option Explicit Sub ユーザーフォーム表示() 'P79 単価変更画面.Show End Sub '単価変更版 '------------------------------------------- 'A.単位上昇率に関してエラーチェックを行います。 'B.エラーが見つかった場合にのみ、対象商品区分の単位上昇率を元にワークシート上の明細を更新する 'C.処理条件をメッセージボックスにて表示する。 '---------------------- Private Sub 終了_click() End End Sub Private Sub 商品区分_change() End Sub Private Sub 単価上昇率_change() End Sub Private Sub 単価変更_Click() Dim i As Long Dim cut As Integer Dim 単価上昇率 As String Dim 商品区分 As String If IsNumeric(単価上昇率) = False Then MsgBox ("数値を入力して下さい。") 単価変更画面.単価上昇率.SetFocus i = Cells(i, 4) End If i = 3 cut = 0 Do While Cells(i, 4) <> "" If Cells(i, 4) = 単価変更画面.商品区分.Text Then   Cells(i, 6) = Cells(i, 6) * (1 + 単価変更画面.単価上昇率.Text / 100) cut = cut + 1 End If    i = i + 1    Loop If cut = 0 Then MsgBox ("該当する商品は存在 しませんでした。 ") 単価変更画面.商品区分.SetFocus Else MsgBox (cut & "件の明細を変更しました。") End If End Sub

  • Access2000 Len関数 フォームで困っています

    最近Accessを始めた初心者です。 レポートで出力する際に文字が切れないように、フォームで入力文字数の制限をするため、Len関数でプロパティの入力規則に以下の設定をしました。 入力規則 Len([フィールド名])<51 エラーメッセージ 50文字以下に調整してください。 で、入力テストをしてみたところ、50文字まで入力可能、51文字からエラーメッセージが表示されるところまでは問題ないのですが、エラーの発生したテキストボックスを空にして、他のテキストボックスへ移動すると、また同じエラーメッセージが出てしまいます。 その後は何文字か入力しないと次のテキストボックスに移れなくなってしまい、入力する場所を間違えた場合にフォームを開きなおさねばならない状態です。 他には新しいレコードに移る際に、コードに以下のメッセージを設定していますが、他は何もしていません。 Private Sub Form_BeforeUpdate(Cancel As Integer) Beep If MsgBox("情報が変更されています! 変更されたデータを保存しますか?", _ vbYesNo + vbQuestion) = vbNo Then Me.Undo Cancel = True End If End Sub どなたかご教授いただけないでしょうか。

  • access フォームについて

    access2003にて登録フォームを作成しています。 このフォーム内に入力したデータを登録ボタンを押し、「登録しますか」のメッセージに 「いいえ」とすれば保存せずにこのフォームを閉じる。 「キャンセル」とすれば保存せずにフォームに戻る。 「はい」とすれば保存して閉じたいです。 しかし、以下の式を実行すると 「いいえ」はバッチリ希望通りに動くのですが、 「キャンセル」をすると保存されてフォームに戻り、 「はい」とすると保存されずにフォームが閉じられてしまいます。 何がまずいのでしょうか・・・。 ----- Private Sub Form_BeforeUpdate(Cancel As Integer) Dim Ret As Integer Ret = MsgBox("登録しますか?" & vbCrLf & " " & vbCrLf & "「いいえ」を選択すると保存せず閉じます", vbYesNoCancel) '「いいえ」を選択したら、保存せずに閉じる If Ret = vbNo Then DoCmd.Close acForm, "振返りデータ", acSaveNo '「キャンセル」を選択したら、保存せずにフォームに戻る Else If Ret = vbCancel Then Else DoCmd.Close acForm, "振返りデータ", acSaveYes End If End If End Sub

  • ユーザーフォーム データ消去の時の処理

    環境:Excel2002です ユーザーフォームのテキストボックスの入力チェックをしています Rem**************** Rem TextBox5 Check Rem**************** Private Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox5.Text) = 0 Then '未入力Check If IsNumeric(Me.TextBox5.Text) = False Then '数値入力Check MsgBox "数値で入力してください", _ vbExclamation, "納品書作成ツール" Me.TextBox5.SetFocus Exit Sub End If MsgBox "入力してください", _ vbExclamation, "納品書作成ツール" Me.TextBox5.SetFocus Exit Sub End If Me.TextBox5.Text = Format(Me.TextBox5.Text, "#,##0") End Sub 入力したデータを消去して Enterキーを押すか、マウスでクリックした時のいずれでも Len(Me.TextBox5.Text) = 0 と認知されて "数値で入力してください"のメッセージが表示されてしまいます このメッセージが出ないようにするにはどうしたらいいのでしょうか ご教示願います

  • ユーザーフォームのSetFocusが働かない?

    エクセルのユーザーフォームにtextboxが2つとCommandButtonが2つ配置しています。 textbox1に入力されるのを10以下に限定するため、それ以上の数字が入力されるとExit時にエラーを表示し、textbox1にフォーカスを戻したいのです。 ですが、以下のようにするとエラー時にはtextbox2も飛ばしてCommandButton1にフォーカスされます。 どのようにするのが正解なのでしょうか。 よろしくお願いします。 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If CInt(TextBox1.Text) > 10 Then MsgBox ("ダメ") TextBox1.SetFocus End If End Sub

  • フォームのボタンからのみexcelを終了したい

    おねがいします。 都合上、フォームのボタンからだけexcelを終了したのです。 Private Sub CommandButton1_Click() Application.DisplayAlerts=False Application.Quit End Sub それに伴い、 右上のexcelのxボタン、シートのxボタンを無効化または非表示にしたいです。 Private Sub Workbook_BeforeClose(Cancel As Boolean)      If CloseMode = 0 Then     Cancel = 1   End If End Sub これで、エクセルxボタンは無効になりましたが、 フォームからの終了も出来なくなってしまいました。 フォームからのみ終了する方法を教えてください。

  • 下記質問Vol.2です

    strSQL = "insert into 商品マスタ values(" & txtループ(0).Text & ",'" & _ txtループ(1).Text & "'," & txtループ(2).Text & ")" strSQL2 = "update 商品マスタ set 商品名=" & "'" & txtループ(1).Text & "'," & "単価=" & _ txtループ(2).Text & " where " & "商品ID=" & txtループ(0).Text If txtループ(0).Text = "" Then MsgBox "商品IDに何かを入力してください" txtループ(0).SetFocus Exit Sub End If If txtループ(1).Text = "" Then MsgBox "商品名に何かを入力してください" txtループ(1).SetFocus Exit Sub End If If txtループ(2).Text = "" Then MsgBox "単価に何かを入力してください" txtループ(2).SetFocus Exit Sub End If vol.3へ 関連URL:http://www.okweb.ne.jp/kotaeru.php3?q=160999

  • ACCESS2000 ボタンメッセージについて

    ACCESS2000を使用しております。 フォームのボタンを押すとレポートが開くようになっています。 フォームのフィールド「終了日」がうるう年の2/28だったら、ボタンを押した時に警告のメッセージが出るようにしたいです。 現在は以下の通り、「終了日」を更新した時にメッセージが出るようにしています。 --- Private Sub 終了日_BeforeUpdate(Cancel As Integer) Const cMsg = "うるう年ですけど、2/29じゃなくて大丈夫ですか?" If Format(Me.終了日.Text, "mdd") = "228" And _ IsLeapYear(Year(Me.終了日.Text)) Then If MsgBox(cMsg, vbYesNo) = vbNo Then Cancel = True End If End If End Sub --- これをボタンの方にも流用しようと思い、(終了日を更新しない状態でもボタンを押すことがある為、その時点でもチェックを掛けたい) 以下を「マウスボタン解放時」に入れてみましたが、エラーが出てしまいました。 --- Private Sub Ctl_新_証書新規_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Const cMsg = "うるう年ですけど、2/29じゃなくて大丈夫ですか?" If Format(Me.終了日.Text, "mdd") = "228" And _ IsLeapYear(Year(Me.終了日.Text)) Then If MsgBox(cMsg, vbYesNo) = vbNo Then Cancel = True End If End If End Sub --- エラー内容は以下の通りです。 実行時エラー'2185' コントロールがフォーカスを取得していない時に、コントロールのプロパティまたはメソッドを参照することはできません。 そのままコピペしたので、値の更新をするとかしないとか、 ボタンを押した場合では関係ないので、その辺がエラーになっているのだと思うのですが、 どこを直したら良いのか分からず、お知恵をお貸し下さい。 要は、ボタンを押した時に警告メッセージを出し、「はい」であればレポートを開き(クリック時に開くマクロが入ってます)、「いいえ」であれば、開かずに元の画面のままが良いです。 宜しくお願いいたします。

    • ベストアンサー
    • Skype
  • ユーザーフォームでの新規ボタン作成

    エラーが出て、自己解決が出来ず皆さんのお知恵を借りたく投稿しました。 質問内容や文章が分かりづらくてご迷惑かもしれませんが、どうかよろしくお願いいたします。 Excel、VBAのユーザーフォームで顧客情報を入力するものを作成しています。 やりたい事は、新規ボタンを押したら氏名が入っていないセル(行)にジャンプするものを作成したいです。 まず、私がした事として・・・・ ---------------------------------- Private i As Long Public Sub Display() laCODE.Caption = Worksheets("顧客データ").Cells(i, 1).Value cmb部屋番号.Value = Worksheets("顧客データ").Cells(i, 2).Value txt氏名.Value = Worksheets("顧客データ").Cells(i, 3).Value txt生年月日.Value = Worksheets("顧客データ").Cells(i, 4).Value txtTEL.Value = Worksheets("顧客データ").Cells(i, 5).Value end sub Private Sub UserForm_Initialize() Worksheets("顧客データ").Select i = 2 Call Display end sub 新規ボタンをコマンドボタンで作成し、 Private Sub cmd新規_Click() If Me.txt氏名 <> "" Then r = Cells(i, 3).End(xlDown).Row i = r + 1 Call Display Else MsgBox "氏名が空欄です。", vbOKOnly + vbExclamation, "Input Error!" '空欄であればエラー表示 Exit Sub End If End Sub 顧客データというシートがあり、1行目にはタイトル、2行目以降にデータ内容が登録されます。 ---------------------------------- 内容は、多少省略はしていますが、上記の内容で作成しました。 新規ボタンを押すと、氏名が登録されていないレコードまでジャンプし、一見成功したように見えますが、最後のレコード(氏名が入っている)で、新規ボタンを押すとエラーが出てしまいます。 初心者でご迷惑かもしれませんが、どうかご教授よろしくお願い致します。

専門家に質問してみよう