アクセスの登録について。(その2)

このQ&Aのポイント
  • アクセスの登録についてについての質問です。
  • 登録が自動でされないようにしたい場合、変更したデータを元の状態に戻す方法を教えてください。
  • フォームのイベントの中の「更新前処理」というモジュールを使用すると、登録の確認が表示されるようになります。いいえを選択すると登録されません。
回答を見る
  • ベストアンサー

アクセスの登録について。(その2)

先ほど質問したばかりなのですが、追加で質問です。 登録が自動でされないように下記のように記述するように教えてもらい登録のたびに確認がでるようになりまいた。でも、変更したらいけないところを間違って変更した場合、登録を「いいえ」にすると、登録はされないのですが、「指定したレコードに移動できません」のコメントがでます。登録しない場合は、元のデータのままにもどしたいのですが、元のデータにはもどれません。どのようにしたらよいでしょうか? 何度もすみません。 <フォームのイベントの中の、「更新前処理」に次のモジュールを書い<てみてください。 <Private Sub Form_BeforeUpdate(Cancel As Integer) <If MsgBox("登録しますか?", vbYesNo) = vbNo Then <Cancel = -1 <End If <End Sub <いいえを押した場合は、登録されません。

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

  • ベストアンサー
  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.2

取りあえず、登録の確認時にあわせて編集もキャンセルさせるなら Private Sub Form_BeforeUpdate(Cancel As Integer) Dim rts As Integer rts = MsgBox("登録しますか?", vbYesNoCancel) 'いいえ 単に登録をキャンセル 編集中のまま If rts = vbNo Then Cancel = -1 End If 'キャンセル 登録をキャンセルし 編集も解除する If rts = vbCancel Then Cancel = -1 DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70 End If End Sub ですかね。 ただし、当方確認したのはAccess2003です 2007とかはメニューが ガラッと(方言?)変わっているのでメニューの操作は動作しないかも そのときは、あまりお勧めしませんが、 DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70 の代わりに、 SendKeys "{ESC}" で、直接 ESCキーを送ってください。

ayanohina
質問者

お礼

ありがとうございました!!アクセス2003ですので、すぐにうまくいきました。今後もよろしくお願いいたします。

その他の回答 (1)

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.1

先の回答をしたものです。 >「指定したレコードに移動できません」のコメントがでます。登録し これの意味が良く見えませんが・・ 更新をキャンセルしたら、そのデータは編集中のまま (レコードセレクタに、鉛筆マークがでて変更中の状態) だと思います。 編集している状態で、登録しない>変更を無かった前に戻したい場合 通常、ESCキーを押すと、編集中を解除してもとの 未入力の状態になります。 同然、他のレコードへ移動できます。 編集取り消しのECSキーを押すのまで自動にすることも出来ますが 共通の操作なので、そこまでしなくてもと思います。

関連するQ&A

  • ACCESSのフォーム

    ACCESSのフォームでデータを入力しています。 既に入力したデータを誤って上書きしないように、更新前処理で下記のコードを入れました。 Private Sub 単価_BeforeUpdate(Cancel As Integer) If MsgBox("変更を保存しますか?", vbYesNo) = vbNo Then Me.Undo 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

  • Access 更新キャンセルするには?

    Access2000で作成しています。 フォーム上でデータを書き換え後、更新をしない場合はどうしたらよいのでしょうか? 【希望する流れ】  1.データを変更  2.「更新」ボタンクリック     「データの更新をします。よろしいですか?」のメッセージ   (1)更新する場合:データを更新     「データが更新されました」のメッセージ   (2)更新しない場合:データを変更前に戻す     「データの更新がキャンセルされました」のメッセージ  3.フォームを閉じる  4.別のフォームを開く この動作をフォーム上にある「更新」ボタンのクリック時イベントにすることはできますか? とりあえず、現在は以下のようなものが作ってあります。 「VBA」  Private Sub Form_BeforeUpdate(Cancel As Integer)  '更新前確認   If MsgBox("更新します。よろしいですか?", vbYesNo, "更新確認") = vbNo Then   Cancel = True   Me.Undo   End If  End Sub 「更新」ボタンクリック時(こちらはマクロです)  ・フォームを閉じる  ・別のフォームを開く 今の状況では、更新する場合は問題ないのですが、更新しない場合、 「このレコードを保存することができません。  レコードを保存する時にエラーが発生しました。  ・・・・・・・・・・・」 というメッセージが出てきてしまいます。 どのようにVBAを作ればよいでしょうか? 説明不足の場合、補足いたします。よろしくお願いします。

  • 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
  • アクセスVBAにて登録ボタン押下時の動作記述

    顧客登録フォームで登録ボタンの押下時、更新前処理にて「はい/いいえ」の選択をしています。 ×ボタンでも更新前処理が実行されるため処理の記述に困っています。 下記が希望動作です。 -----登録ボタン はい  → レコードを保存する  顧客登録フォームを閉じる 顧客照会フォームを開く    いいえ → レコードを保存しない 顧客登録フォームに留まる -----×ボタン はい  → レコードを保存する  顧客登録フォームを閉じる いいえ → レコードを保存しない 顧客登録フォームを閉じる -----現在のソース Private Sub Form_BeforeUpdate(Cancel As Integer)   Ret = MsgBox("登録しますか", vbYesNo)   Select Case Ret     Case vbNo     Me.Undo   End Select End Sub Private Sub 登録_Click()   DoCmd.RunCommand acCmdSaveRecord End Sub どのように記述したらよいのでしょうか。 以上宜しくお願いします。

  • フォームを閉じないようにする VB6 SP6

    VB6 でプログラムを作成中です。 プログラムを実行して、フォームが立ち上がった所で右上の×を押し、画面を閉じようとします。 そこで以下のコードで、もし×が押されたらvbYesNoメッセージボックスを表示させ、もし「いいえ」が押されたらフォームを閉じないようにし、実行画面を維持したいのです。 しかし、Exit Sub ですとプログラムが終了してしまい、困っています。宜しくお願い致します。 Private Sub Form_Unload(Cancel As Integer) 'フォームを閉じる Dim last As String last = MsgBox(" プログラムを終了させますか?", vbYesNo, "終了確認1") If (last = vbYes) Then Dim last2 As String last2 = MsgBox(" 本当にプログラムを終了させますか?", vbYesNo, "終了確認2") If (last2 = vbNo) Then Exit Sub End If End If If (last = vbNo) Then Exit Sub End If End Sub

  • エラー内容が分かりません

    ACCESS VBAの独学を始めました。テキストどうりにコードを入力しているのですが、以下のエラーがでていまいます。 プロシージャの宣言がイベントまたはプロシージャの定義と一致していません 入力内容は以下のとおりです Private Sub 閉じる_Click(cancel As Integer) Dim sts As Integer sts = MsgBox("終了しますか?", vbYesNo) If (sts = vbNo) Then cancel = True Else DoCmd.Close End If End Sub (cancel as ・・・)を消去すると、エラーはでません。 なぜなのか分からず質問しました。 すみませんが、よろしくお願いいたします。

  • プログラムのイベント処理中断方法

    VB2008のイベンド中止処理についてお教え頂けませんでしょうか。 Formにボタンが1つあり、クリックするとCSVファイルが出力される処理をしたいです。 やりたい処理: 1. 「CSVファイル出力しますか?」というメッセージを出す。YESなら処理続行。Noなら処理中止。 2. CSVファイル出力処理。 3. 「CSVファイルを出力しました。」 (プログラム自体を終了したいわけではありません) VBAだと下記のようなコードを書きたいです。 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then end end if 'CSV出力処理~~~ end sub VBにendというステートメントがあれば、良いのですが無さそうです・・・ 何か上手な処理はあるでしょうか?VBAのコードになってしまいますが、下記のような処理方法しかないでしょうか? '''''''''''''''''1 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then end else 'CSV出力処理~~~ end if end sub ''''''''''''''''2 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then goto here end if 'CSV出力処理~~~ here: 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 フォーカス喪失時 日付の空白許可

    お世話になっております。 以下の「終了日」というフォールドで”うるう年”をチェックしています。 「2012/02/28」と手動で入力した場合確認画面が出るようにしています。 ほとんどは2/29が正しいですが、稀に2/28でOKの場合もあり、これは許可しています。 もっと稀に終了日が空白でOKの時もあるのですが、日付が入力されていないからか、 エラーが出て先へ進めません。 うるう年をチェックしつつ、空白も許可するにはどうしたら良いでしょうか。 ---------- Private Sub 終了日_Exit(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 ---------- 宜しくお願い致します。

専門家に質問してみよう