- 締切済み
Access2000
こんにちは。 Access初心者です。 フォームに多数の入力項目がある為、現状の設定だと、 ちょっとでも項目を変更した瞬間に何の確認もなしに レコードが上書きされてしまいます。 変更があった場合に再確認のボップアップ画面が出てきて、 「はい」を選んだ時だけ、上書きされるような機能を 持たせたいのですが、やり方が全くわかりません。 インターネットでいろいろ調べて試しはしてみたのですが 全く反映されません。 どなたか、わかりやすく設定方法を教えて頂けませんでしょうか? どうぞよろしくお願い致します。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- Dxak
- ベストアンサー率34% (510/1465)
#1です ぱ~っと、見たところ、おかしな所は無いですね しかし DoCmd.RunCommand acCmdSaveRecord で、キャンセルが起きているって事は、 ussave = True が、有効に働いてなく Private Sub Form_BeforeUpdate(Cancel As Integer) で、「Cancel = True」が、動作していると、言うこと・・・ 判断する方法として、 Dim ussave As Boolean を、書き換えて、 Dim usSave As Boolean として、すべてが「ussave 」から「usSave」へ自動的に書き換われば、すべてが同じフォームのモジュール上にあるということ、ならない場合は、記載している場所を間違えてるということ 多分、モジュールの記載場所を間違えてるんでしょかね?
- Dxak
- ベストアンサー率34% (510/1465)
- Dxak
- ベストアンサー率34% (510/1465)
#1です > 当初の解説にございました、Option Compare Databese > という標記は出てきません>< これは、出てきた!って言われる > private Sub Form_Current() > End Sub です。 の上に記載されていると思いますが・・・無ければ、考えないで、エディタで、一番上に Dim usSave As Boolean を記載ください > private Sub Form_Current() > End Sub です。 の「Sub~End Sub」の外に記載します ですので、最初であれば・・・ Dim usSave As Boolean private Sub Form_Current() End Sub のようになります
補足
ありはとうございます。 やってみたのですが、どうしてもエラーが出てしまいます。 エラー画面を載せますので、一度見ていただけますでしょうか? よろしくお願い致します。
- Dxak
- ベストアンサー率34% (510/1465)
#1です > フォームのモジュールですが、「・・・」をクリックした後に、 > 確かに左上に、モジュールを選択するアイコンが出てきます。 > 「新しい標準モジュール」の選択でいいのでしょうか? 何か違うような?・・・ クリック後、 「式ビルダ」 「マクロビルダ」 「コードビルダ」 って、出てきませんか? このうち「コードビルダ」が、そうなんですが・・・ そうすると、Visual Basic Editerが、起動します > また、Dim ussave As Boolean > を入力した後に、保存ボタンを押すと、「次のオブジェクトへの変更 > を保存しますか?」 > と聞かれますが、「はい」を選択するとこれで設定はOKなのでしょうか? Visual Basic Editerで、保存を押した時、質問文が出たような記憶が無いです > 一応、教えて頂いたとおりに入力してみたのですが、 > 保存ボタンをクリックすると、runcommandの実行はキャンセルされ > ましたという文章がでてしまいます・・・ えっと、#1での回答を実施した前提で記載してたので、#1で記載した内容を実施してない、確認していないなら・・・ #2から、読んで、そのままにしてください 「Cancel = True」を「Me.Undo」に変更したのは、「DoCmd.RunCommand acCmdSaveRecord」が、Cancelを受けると、質問のとおり、キャンセルを受けたと言う警告が、出るために変更してあります 何か、既に、記載しているところが、違うのでは?って、思ってるのですが・・・
お礼
こんにちは。 何度も何度もありがとうございますorz 感謝しております。 >クリック後、 >「式ビルダ」 >「マクロビルダ」 >「コードビルダ」って、出てきませんか? >このうち「コードビルダ」が、そうなんですが・・・ >そうすると、Visual Basic Editerが、起動します 確かに、出てきました! ただ、Visual Basic Editerの画面になった後、 表示されているのが、 private Sub Form_Current() End Sub です。 当初の解説にございました、Option Compare Databese という標記は出てきません>< どの部分に表示されているのでしょうか? よろしくお願い致します。
- Dxak
- ベストアンサー率34% (510/1465)
#1です > (ここは、フォームのモジュールではなく、オブジェクトの > モジュールの事でしょうか?) フォームのモジュールです オブジェクトのモジュールに記載しても、機能しません > (これは、どこに対して設定すればよろしいのでしょうか? > 入力できる項目全てに対してでしょうか? > レコード移動時のイベントとはどこから設定できますか?) えっと、フォームのイベントです フォームをデザインビューで開き、左上の四角を、クリックすると、黒い四角が、現れます(または、メニューの編集、フォーム全体の選択をクリック) その状態で、プロパティのイベントを見てください そうすると「レコード移動時」と言う、プロパティが、あります それをクリックすると、右側に「…」が、出ますので、それをクリック で、モジュールを選択すればOKです 選択後、モジュール画面が出て、 Private Sub Form_Current() End Sub の状態で、モジュールの記載が始まります > >フォームの更新前処理のイベントを書き直して > (これは、具体的にどの部分を書き直せばよろしいのでしょうか?) #1で、回答したとおり、動作テストした前提で、記載してます ですので、#1と#2の差異を書き直すって、意味です > ご回答では、最後に「保存」のコマンドボタンを作成し、クリック時 > のイベントを設定するという解説になっておりますので、それまでの > イベント設定をどこに対して行えばよいのかがわかりません。 すみません フォームのイベントは、フォームに、コマンドボタンのイベントは、コマンドボタンにと、言うことで・・・ 何が、判らないのか?判らない状況です^^;
お礼
早速の御返事ありがとうございます。 フォーム全体へのイベント設定適用はそういう風にするんですね。 すごく勉強になりました。そしてそんなことも知らずに申し訳 ございません>< フォームのモジュールですが、「・・・」をクリックした後に、 確かに左上に、モジュールを選択するアイコンが出てきます。 「新しい標準モジュール」の選択でいいのでしょうか? また、Dim ussave As Boolean を入力した後に、保存ボタンを押すと、「次のオブジェクトへの変更 を保存しますか?」 と聞かれますが、「はい」を選択するとこれで設定はOKなのでしょうか? 一応、教えて頂いたとおりに入力してみたのですが、 保存ボタンをクリックすると、runcommandの実行はキャンセルされ ましたという文章がでてしまいます・・・ 原因が全然わかりません><
- Dxak
- ベストアンサー率34% (510/1465)
#1です 少し応用すれば、可能だよ フォームのモジュールを開いて、 > Option Compare Database の下に Dim usSave As Boolean を追記 フォームのレコード移動時にイベントで Private Sub Form_Current() usSave = False End Sub フォームの更新前処理のイベントを書き直して Private Sub Form_BeforeUpdate(Cancel As Integer) If usSave Then If Me.Dirty Then If MsgBox("内容が変更されていますが保存しますか?", vbYesNo) = vbNo Then Me.Undo End If End If Else Cancel = True End If End Sub コマンドボタンを配置して、クリック時のイベントに Private Sub [コマンド]_Click() usSave = True DoCmd.RunCommand acCmdSaveRecord usSave = False End Sub と、記載 [コマンド]は、コマンドボタンの名前によって、異なるけどね 質問の文章から、イメージできる内容だと、こんな感じかな? イメージしてた物と違う、思ったとおり動作しないと、言うのは・・・ Acc2000が、手元に無いから確認できないけど^^; Acc2002では、動作確認してますよ
お礼
丁寧な回答をありがとうございます。 やってみたのですが、わからない点がございます。 >フォームのモジュールを開いて、 >Option Compare Databaseの下に >Dim usSave As Booleanを追記 (ここは、フォームのモジュールではなく、オブジェクトの モジュールの事でしょうか?) >フォームのレコード移動時にイベントで (これは、どこに対して設定すればよろしいのでしょうか? 入力できる項目全てに対してでしょうか? レコード移動時のイベントとはどこから設定できますか?) >フォームの更新前処理のイベントを書き直して (これは、具体的にどの部分を書き直せばよろしいのでしょうか?) ご回答では、最後に「保存」のコマンドボタンを作成し、クリック時 のイベントを設定するという解説になっておりますので、それまでの イベント設定をどこに対して行えばよいのかがわかりません。 何度も質問してしまい、申し訳ございませんが、ご回答の程 よろしくお願い致します。
- Dxak
- ベストアンサー率34% (510/1465)
設定方法??? Acc2000にて、動作確認してませんので、確認してみてください フォームの更新前処理に、イベントを作成して・・・ Private Sub Form_BeforeUpdate(Cancel As Integer) If Me.Dirty Then If MsgBox("更新しますか?", vbYesNo) = vbNo Then Cancel = True End If End If End Sub と、なるように転記ください フォームをセーブして保存、再度開いてみて、挙動確認してみてください
お礼
ありがとうございました。 もう一点教えていただければ幸いです。 フォームに入力する項目が多数あり、頻繁に入力内容の変更が 行われる為、入力後の確認が必要です。 しかし、通常のAccess設定は内容を変更しても確認のポップアップは 表示されず、自動でテーブルに上書き保存されてしまいますよね。 いくつかの内容を変更し、最後に「保存」ボタンを押した時に、 前の内容と変更点があれば、「内容が変更されていますが保存しますか?」 とポップアップ表示で確認してくれるように設定したいのです が、やりかたが全くわかりません>< どこにどのように式を入力すればいいのでしょうか・・・ Accessは詳しいほうではないので、どうか教えて頂ければ 幸いです。よろしくお願い致します。
お礼
質問番号4767600 へ続きを画像付きで投稿致しました。 よろしくお願い致します。
補足
私もそう思います。 もうひとつ画像を見ていただけますか? Dim usSave As Boolean が変な場所に記載されています。