• ベストアンサー

accessのフォームを空にしたい

テーブルと結びついたフォームがあります。 ボタンを押すと、ある処理をします。 その処理がエラーだった場合、フォームを空にしたいと思っています。 どうすればいいのでしょうか? マクロを使った場合、条件抽出でありえないデータをすればいいと思います。 しかし、今回はVBAを使って作っています。 まだVBAがよくわからないので、どうしていいかわかりません。 よろしくお願いします。

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

マクロを作れるなら、 そのマクロをVBAに変換してみたらいかが? ツール→マクロ→マクロをVisualBasicに変換 だったかな。 その方が勉強になると思いますよ。 私なら? Docmd.GotoRecord , , acNewRec で、新規データに飛ばしますかね。

a-z_A-Z
質問者

お礼

ありがとうございます。 >ツール→マクロ→マクロをVisualBasicに変換 それも考えたのですが・・・ アクセスは久しぶりなので、マクロのやり方があやふやです。 同じ一からやるなら、VBAの方がいいかな~と思っています。 >Docmd.GotoRecord , , acNewRec やってみたのですが、「指定したレコードに移動できません」と出ます。 もしかして・・・ フォームを開いたときに、何もない状態にしたいので、フォームのプロパティの「データ入力用」を「はい」にしています。 これが原因でしょうか? でも、いいえにすると、全データが表示されるし。 何かいい方法は無いでしょうか?

その他の回答 (4)

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.5

No2 です。 > とりあえず、Me.Undoをいれてみました。 > すると、「Meキーワードの使用方法が不正です。」と怒られてしまいました。 処理は、標準モジュールに書かれている、ということですね。 「Me 」 がフォーム やレポート の クラスモジュールに書かれている場合は 自分自身のフォーム(レポート)を表します。 いろんな書き方がありますが   Forms("フォーム名").Undo   Screen.ActiveForm.Undo とか。 後者は、ポップアップウィンドウでは NG です。

a-z_A-Z
質問者

お礼

ありがとうございます。 エラーはでなくなりました。 しかし、入力するデータが正しくないので、テーブルに入れていないのでUNDOをしても意味が無いようです。 なんとなく、refreshをしてみました。(野生の感なので根拠はありません) これもだめでした。 改めて、フォームを開いたときの状態にしたいのですが・・・ どうすればいいのでしょうか?

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.4

1,3ですw すいませんが、書き忘れです;; 当方、access2000でしか動作確認しておりません。 ヴァージョンが違うと、もしかしたら動かないかもです;;

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.3

1です。 なるほど、入力用フォームなんですね。 入力中のレコードを「削除する」文です。 一応、フォームは空になってくれます。 Private Sub ボタン_Click() On Error GoTo Err_ボタン_Click '警告メッセージ非表示 Docmd.SetWarnings False '入力中のレコードを選択して DoCmd.DoMenuItem acFormBar, acEditMenu, acSelectRecord, , acMenuVer70 '削除します。 DoCmd.DoMenuItem acformber, acEditMenu, acDelete, , acMenuVer70 '修了処理 Exit_ボタン_Click: '警告メッセージ表示 Docmd.SetWarnings True Exit Sub 'エラー処理 Err_ボタン_Click: MsgBox Err.Description Resume Exit_ボタン_Click End Sub ちょっと強引ですが、こんな感じですか。

a-z_A-Z
質問者

お礼

ありがとうざいます。 書いていただいたコードですが、私が知らない内容が多数あるので、また試していません。 一個一個調べてから試そうと思います。 それより、質問する時に、「ある処理」と推理小説の犯人を隠すような書き方をしたので、質問内容がわかりにくくなっているようなので、改めて今回したい内容を書きます。 まず、データをコピーします。 ↓ それを、クリップボードから変数に入れます。(ボタンがありクリックすると変数にいれる処理をします) ↓ それを正規表現で、必要なデータを抜き出します。 ↓ それをテーブルに入力します。 と言う流れです。 なぜ、入力用のフォームか? フォームを開くと、今まで入力したデータすべてが表示されます。 私としては、クリップボードから入力したデータだけ表示させたかったです。 そこで、入力用にすると、今まで入力したデータが表示されませんでした。 (今、考え付いたのですが、別のテーブルを作ってデータがOKの場合、既存のテーブルにデータを追加して、新規に追加したテーブルを削除すれば、問題ないような気がしますが、なるべく手間は減らしたいとおもっています。) ボタンを押すと、クリップボードからデータを読み込むのですが、ボタンを押す前は、前回読み込んだデータの一覧が表示されています。 読み込んだときに、読み込んだデータが正しくない場合、注意のダイアログを出して、OKボタンを押すと、前回入力したデータが表示されているのを消して、何もない状態にしたいと思っています。 ついでに、sql serverにデータを入れたいので ADOの使用を考えています。 これが今回したい内容です。

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.2

> ボタンを押すと、ある処理をします。 どんな処理か、にも依りますが、 もしかすると、 新規入力中のレコードをキャンセルしたい、ということでしょうか? でしたら、  Me.Undo とか。

a-z_A-Z
質問者

お礼

ありがとうございます。 とりあえず、Me.Undoをいれてみました。 すると、「Meキーワードの使用方法が不正です。」と怒られてしまいました。