• ベストアンサー

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% (295/459)
回答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% (295/459)
回答No.2

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

a-z_A-Z
質問者

お礼

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

関連するQ&A

  • ACCESSのフォームフィルタ

    ACCESS初心者です。 テーブルでフォームフィルタを使ってOR条件をつけてデータを抽出しましたが、解除ボタンで解除できるのですが、次にフィルタボタンを押すと前の条件で抽出されたデータが表示されてしまいます。 何も条件をつけなかった状態に戻すには、データウィンドウに戻るしかないでしょうか?

  • Accessフォームの操作で

    2つの別々なフォームがあります。 それぞれのフォームの基になっているテーブルが別々にあります。 ひとつはデータが入力されているテーブルで もうひとつはフォームから入力していく空のテーブルです。 データが入力されているフォームでは、データ抽出するサブフォームを持っていて、 そこにあるレコードセレクタをダブルクリックすると もうひとつの空のテーブルから作成したフォームにデータを入力していくようにしたいんですけど、うまくいきません。 乱文でわかりにくいとは思います。 ご迷惑をおかけしますが教えてください。 よろしくお願いします。

  • フォームから抽出の自動化(VBAかマクロ)

    フォームから条件を入力して抽出したいと思っています。 できればボタンでいっきに抽出したので、クリック時にイベントが起こるようにVBAかマクロを設定しようと思ってます。 ある3種類のデータがあって、ボタンによってその種類ごとのデータのみ抽出し、他のデータをみずにその種類のデータのみ変更したいと思っています。 そのためフォームからの抽出がしたいのですが、できればShift+F9をボタン一つで終わらせたいのです。 できるだけキーボードを使わない方向でいっています。 わかりにくいのですが、フォームのテキストボックスに特定の番号を入れ、その上でShift+F9ができるVBAができるか知りたいです。 よろしくお願いします。

  • ACCESSの検索フォーム

    アクセス初心者なのですが教えてください。 検索フォームをつかっていくつかの条件に当てはまるデータをフォームで抽出したいのですがどのようにしたらいいか分かりませんどなたか教えてください。 マクロでWHEREつかってやってみたのですがいくつかの条件を入れたのですが途中で切れてしまうのと、ひとつでも空欄があるとまったく抽出しません。 どうかよろしくお願い致します。

  • accessのマクロで子フォームを使ったフィルターの方法を教えて頂きた

    accessのマクロで子フォームを使ったフィルターの方法を教えて頂きたいです。 各フォームにIDが1~50000まであり 子フォームAのID1012をクリックをトリガにして、 子フォームBのID1012をフィルターで抽出したいのですが、 どう設定して良いのか分かりません。 確かフィルター名と、条件を設定する所があったと思うのですが、 フィルター名は設定せず、 条件に、[フォーム名]![子フォームB名]![ID]=[フォーム名]![子フォームA名]![ID] と設定すると、データの元がないと言った内容のエラーが出て動きませんでした。 現在、手元にaccessがない為、少し曖昧な質問になってしまい、すいません。 出来れば、設定の例を挙げて頂ければ、幸いです。 質問の背景として、VBAで作成した所、処理速度が遅く、他の処理をマクロに変更すると数倍早くなったので、この処理もマクロで行おうと思っています。

  • アクセスのフォーム

    アクセスのフォームで、ヘッダー部にボタンを3つ作成し、それぞれ名前を"1","2","3"とします。そして、全てのボタンに埋め込みマクロで"1"にはクエリ1を実行する、"2"にはクエリ2を実行する、"3"にはクエリ3を実行するというマクロを埋め込みます この時ボタンをクリックすると、その結果がフォームの詳細部分に表示させる事はできますか?例えば"2"をクリックすれば詳細部分にクエリ2の結果が表示される様にしたいです。それぞれのクエリの構成は異なります。テーブル形式で表示されるのではなく、フォームの形式で表示される様にしたいです。 表示された文字をクリックするとヘッダー部のテキストボックスにその文字が入力され、クエリの抽出条件がそのテキストボックスになっており、クエリ実行ボタンを押せばその抽出条件でクエリが実行され、詳細部分に表示・・・という様に検索できる様にしたいです。文字をクリックすればテキストボックスへというのは以前この場で教えて頂きました。 説明がうまくできなくてすいません。誰か教えて下さい。 よろしくお願いします。

  • ACCESS フォームに自動連番をふる

    Accessでテーブル→クエリ→フォームと作成し、フォームから特定条件を指定して データを抽出しました。 その抽出したデータに自動連番をつける方法を教えてください。

  • Access、更新用データと連結したフォーム

    度々の質問で恐縮です。 検索フォームの検索結果を、レコードセレクタのWクリックで、 更新するためのテーブルと連結したフォームを開いて、 そのフォーム項目に「値の代入」をしています。 で、その「更新用データのフォーム」で更新項目を編集し、 ボタンを押すと「フォームと連結したテーブル」を使った更新クエリを実行する、 というマクロを実行するようにしてみました。 その処理を実行後、「更新用のフォーム」を閉じて、最初に書いた検索フォームで 検索すると、更新実行結果が反映しません。 レコードセレクタのWクリックを抜きにして、直接「更新用フォーム」を開き、 そのフォームにある「更新用のマクロ」を実行するボタンをキックすると反映します。 で、今は更新用フォームからマクロをキックするボタンは消して、 更新用フォームを閉じると、更新用データのテーブルは更新項目を反映しますので、 直接「更新用マクロ」をキックするだけのボタンしかないフォームを別に開いて、 そのボタンを押すようにしています。 最初の構成で、つまり、「更新用フォームで編集し、その画面のボタンで 更新用マクロをキックして更新実行したい」のですが、編集内容が 「更新データテーブル」に反映するには、どうすれば良いでしょうか? くだくだしい説明を書いてしまい、まことに申し訳ありませんが、よろしくお願いします。

  • ACCESSのフォームを使っての住所録の検索なのですが,

    Accessのフォームを使って住所録から,データを抽出し,その結果をまず表示,その後ラベルシールに印刷をしたいのですが,フォームでの検索は,テーブルのすべての項目について複数の項目を同時検索をできるようにしたいです。 テーブルの構造はごく普通の住所録です。データ件数は8万件ほどです。 どういう方向で作業を進めるべきか分からないのですが,こういった場合は,まず,検索用のフォームを作成し,コマンドボタン(検索・印刷)を配置して, それに対してイベントかマクロの記述をするんだろうなとは思うのですが・・・ 私が思うに,抽出結果を格納するテーブル・検索フォーム・ラベル印刷用のレポートが必要なのだろうと思いますが,それらが何でつながっていくのかが分かりません。参考書などでは,一つ一つのことが別々に書いてあって作業の全体像が分かりません。作業の方向と必要なスキルが同程度などか詳しい方教えてください。

  • AccessのフォームをExcelに出力

    いつもお世話になっております。 現在、Access2003でDBを作成中です。 "テーブル1"をパラメータクエリで抽出します。"クエリ1"。 そのクエリを基にフォームを作成しています。"フォーム1"。これは抽出して印刷したり、Excelに出力するために作成しました。レポートではなく、フォームにした理由は、コマンドボタン等を配置できることからです。 Excelに出力する際のVBAでつまづいてしまいました。 DoCmd.OutputTo acOutputForm, "フォーム1", acSpreadsheetTypeExcel9 これで問題なく出力できています。が、、、 Access2007の一部のPCでこれを実行するとエラーが出ます。 原因は"OutputTo"が含まれているとエラーになるようです。 ちなみにエラーは「現在出力しようとしているオブジェクトの形式は無効です。」 「2007 Office スイート Service Pack 2」こちらをインストールすると良いそうなのですが、だめでした。 WindowsXP、Office2007はこのVBAだとエラーになります。 WindowsVista、Office2007は正常に使えました。 PCの何か設定?と考えたりもしたのですが、はっきりとした原因がわからないのでは、他の人にDBを使っていただけないので、エラーにならないVBAでいきたいです。 もうひとつ、 mFileName = InputBox("ファイル名を入力してください。") DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "フォーム1", mFileName こちらのVBAはクエリの出力だとうまくいくのですが、フォームだとだめでした。 クエリから抽出して保存すれば良いのですが、理想はこの形です。 1.フォーム1を開くと「担当者を入力」とパラメータクエリが働き、抽出結果をフォーム1に表示される。 2.[出力]ボタンを押すと、ダイアログボックスが開いてファイル名を指定して保存する。または、ダイアログボックスが開かなくても名前を指定できれば良いです。最悪、指定できなくても良いですが、原因となる、"OutputTo"を避けたVBAでいきたい。 3.mFileName = InputBox("ファイル名を入力してください。") DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "クエリ1", mFileName これだと、1.でパラメータクエリで抽出結果をフォームに表示させて、2.で[出力]ボタンを押すと、また、パラメータクエリで抽出しなければならなくなるのでできれば避けたいです。 こちらの条件でご教授お願い致します。 また、WindowsXP、Office2007でエラーが出ましたので、これを解決する方法でも良いです。 よろしくお願い致します。

専門家に質問してみよう