• ベストアンサー

AccessVBA フォームを自動で消したいです

こんにちは。たびたび質問させていただいています。 今回の質問は表題に書きましたが、詳しくはこんな感じです。 あるフォームに「マスタを開く」ボタンがあります。 そのボタンをクリックすると、「詳細」で開くのか「標準」で開くのか を選択するフォーム「表示形式選択」がでてきます。 詳細か標準かをチェックボックスで選択したあと「表示」ボタンで それぞれ選択した方のテーブルを表示させます。 この時、テーブルが表示されたら「表示形式選択」フォームはいらない ので自動的に消えるようにしたいのですが、うまくいきません。 ちなみに私がとった方法は「表示ボタン」をクリックした時、 各テーブルの表示処理をしたあと、一番最後に「Docmd.Close」と記述 したのですが、そうすると表示したテーブルが消えてしまいました。 一体どうすれば自動でフォームが消せるのでしょうか? ご教授よろしくお願いします。

noname#181362
noname#181362

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

  • ベストアンサー
  • wandayu
  • ベストアンサー率24% (24/99)
回答No.1

閉じるフォームを指定してあげればいいはずなので DoCmd.Close acForm, "表示形式選択" でよいはずです。 "表示形式選択" に閉じたいフォームの名前でいけるはずです

noname#181362
質問者

お礼

早速の回答ありがとうございました! 無事になりました!感動ですw

その他の回答 (1)

noname#22222
noname#22222
回答No.2

Private Sub 表示_Click() On Error Resume Next   DoCmd.Close End Sub Private Sub Form_Close() On Error Resume Next   DoCmd.OpenForm "formname" End Sub と、やってもOKです。

関連するQ&A

  • AccessVBA データの受け渡し、表示(長いです)

    こんにちは。度々質問させていただき、いつもお世話になっております。 今作成しているものの流れを下に書きます。 テーブル: 「社員マスタ」、「社員マスタ_抜粋」 ※「社員マスタ_抜粋」は「社員マスタ」から最低限必要な項目だけをクエリで抜き取ったテーブルです(例えば、社員ID、氏名、所属部署など) フォーム: 「社員マスタ」(表形式)、「社員マスタ_抜粋」(表形式)、「社員マスタ_詳細」(単票形式) ※「社員マスタ_詳細」は「社員マスタ」テーブルのレコードを一件一件単票形式で見れるフォームです ●実現させたいこと 1、「社員マスタ_抜粋」フォームの中に作成した「詳細」ボタンをクリック 2、「社員マスタ_抜粋」のカレントレコードの社員CDと同じ社員CDのレコードを 「社員マスタ」から探し、「社員マスタ_詳細」フォームにて表示 ●手順2を行うプログラム手順として(自分の頭の中で) 1、「社員マスタ_抜粋」フォームよりカレントレコードの社員CDを引数として、 「社員マスタ_詳細」フォームに渡す(Docmd.OpenArgs 使用) 2、「社員マスタ_詳細」フォームロード時に引数の社員CDと同じ社員CDをもつレコードを 「社員マスタ」テーブルから検索(FindRecord?) 3、発見したレコード内容を「社員マスタ_詳細」フォームに表示 自分で言うのもなんですが、上で書いたプログラム手順はものすごく 効率が悪いのではないかと思います。 またFindRecordでの検索も、このケースに適しているのかわかりません。 プログラム作成の流れ、この部分にはこんな関数がいいんじゃないか? 等、何でも構いませんのでどなたかいいアドバイスをお願いします。

  • AccessVBA データのエクスポート

    こんにちは。 AccessVBAについて質問させてください。 私は今商品マスタを操作するためのシステムを作っています。 私が実現したい機能はこのようなものです。 まず「マスタ開く」ボタンで商品マスタを元にした「商品マスタフォーム」を開きます。 そのフォームの中に「書き出し」というボタンを作成し、そのボタンを クリックすると、フォームの中のデータがExcelデータとして表示されるようにしたいのです。 「TransferSpreadsheet」を使用するところまではわかっているのですが、どうもうまくいきません。 エクスポート元のテーブル名(商品マスタ)と指定するのですが、 「オブジェクト"商品マスタ"が見つかりませんでした。名前やパス名が正しいことを確認してください」とでます。 私が書いたソースはこれです↓ DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "商品マスタ",, True どこがおかしいのかご教授お願いします。

  • アクセスのフォーム

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

  • ACCESSの表形式で、レコードをクリック→詳細を表示させたい

    表題の通りなのですが、ACEESSで、表形式でレコードを表示させています。 これらの詳細を書いたものを、別フォームで作成しています。 要はこの2つを、 表形式のどこかにボタン配置→そのボタンをクリックすると、別フォームで該当テーブルが起動され、見ることができる、 ということを行いたいと思っています。 これらを行うことはできるのでしょうか。 また、できるならその方法をご教授頂けませんでしょうか。 どうぞよろしくお願いします。

  • アクセスで指定したレコードをフォームで開く方法?

    アクセスで、帳票形式のフォームで選択したレコードの内容を、詳細を表示する用のフォーム(単票形式)で開きたいのですが、どうしたらよいのでしょうか?(初心者です) 例えば、帳票形式のフォームで「予約番号:1」のレコード 選択した状態で、ボタンをクリックすると、 詳細を表示する用の単票形式のフォームの「予約番号:1」のレコードが表示されるようにしたいのです。 マクロでは出来なそうなので、VBAで・・・というところまでしか検討がつきません。 使用しているのはアクセス2002です。 どなたかご存知の方がいらっしゃいましたら、教えてください。よろしくお願いします。

  • AccessVBAでADOとDAOとDoCmd

    いつもお世話になっています。access超初心者です。 いろいろまちがっているかもしれませんが、よろしくお願いします。 フォームやクエリを使うのにDoCmd、検索はSQL文、 テーブルとの接続やデータの追加はDAOですが、 Access以外のデータベースの値も必要なのでADOも使用して・・・と考えています。 たとえば、データがあるかを確認するにはフォームを開き、そこのテキストボックスに探すデータを入力、ボタンをクリックすると DoCmdで表示用フォームを用意、SQL文で検索、DAOで検索結果を表示・・・としていますが、このように一つのデータベースを作成するのに、DoCmdやDAOやADOの使用が入り乱れてもよいのでしょうか? まったく知識がなく学習本を頼りにしていますので、ツギハギだらけになってしまっているのでは?と不安です。 アドバイスのほど、よろしくおねがいいたします。

  • Access2003でフォームにあるコマンドボタンで更にフォームを開く

    Access2003でフォームにあるコマンドボタンで更にフォームを開くときのVBA記述で困っています。 Access2003で社員情報管理のデータベースを作成中です。 社員の情報を入力するにあたり、【基本情報】と【詳細情報】とでフォームを分けてあり、【詳細情報】を入力したい場合は、"基本情報フォーム"にあるコマンドボタンをクリックして"詳細情報フォーム"を開くようになっています。 この際、"基本情報フォーム"で開いている社員の【社員番号】を"詳細情報フォーム"の【社員番号】欄にも自動的に表示させるため、以下のようなVBAを記述しました。 Private Sub コマンドボタン_Click() DoCmd.OpenForm "詳細情報フォーム" Forms![詳細情報フォーム![社員番号].DefaultValue = Me![社員番号] End Sub 【社員番号】は7ケタの半角英数で、社員によって、数字だけの場合と、英数混じっている場合とがあります(データ型はテキスト型にしてあります)。 困っているのは、 1.上記を実行した際に、数字だけの社員番号は問題ないのですが、英数混じりの場合だと"社員番号"テキストボックスが「#Name?」という表示になってしまう 2."基本情報フォーム"のコマンドボタンをクリックして新規の"詳細情報フォーム"を開き(社員番号のみが反映され、他の項目は空欄の状態)、詳細情報を入力→保存したあと、別の社員番号で"基本情報フォーム"を開き、コマンドボタンで"詳細情報フォーム"を開くと、前に入力した社員の情報が出てきてしまう。 (つまり、"詳細情報フォーム"のもととなるテーブルに、1行でもレコードがあると、それが出てきてしまう。) 【詳細情報】は、 1.データを入力する社員としない社員とがいる 2.新規でレコードを作成する場合と、既存のレコードを上書きする場合とがある ので、もととなる"詳細情報テーブル"にその【社員番号の】レコードがなければ新規入力画面を、レコードがあればそのレコードを呼び出す形にしたいのですが、英数混じりの表示の件も含め、どうすれば、正しく表示されるか教えていただきたいです。 ぜひぜひよろしくお願いします。

  • アクセス フォームをリクエリしたい

    フォームAを閉じて、フォームBのテーブルに基づいたデータをリクエリ(更新)したいのですが DoCmd.Close acForm, "フォームA" DoCmd.Requery "フォームB" 実行時エラー2109 「カレントレコードには、フォームBという名前のフィールドはありません。」となってしまいます。 フィールド名ではなくフォームB全体を更新したいのですが、どうすればいいでしょうか? フォームBは開いている状態です。

  • 【ACCESS】フォームのレコードソースのクエリを動的に書き直したときの、フォームの再描画

    ACCESS2002 帳票フォームのレコードソースにクエリを指定しています。 フォーム上のコマンドボタンを押したイベントで、その レコードソースとしているクエリのSQLを書き直しています。 問題は、その書き直したクエリをもとにして画面をもう一度 表示させなおしたい(リフレッシュさせたい)ということです。   docmd.close acForm,"フォーム名"   docmd.open "フォーム名" とすると、書き直したクエリの内容でフォームが表示されます。 フォームを閉じる→フォームを開くとしないで、フォームを リフレッシュさせる方法はないのでしょうか?

  • フォームを自動的に閉じたい

    修理依頼を受付するデータベースを作っています。 商品を売った顧客が載っている顧客テーブルから、顧客No.を取得するための検索フォームがあります。検索ができたら、顧客ナンバーをダブルクリックすると、修理依頼テーブルにデータが追加されるところまでできたのですが、検索フォームが開きっぱなしで格好が悪いので、ダブルクリックしたら、自動的に閉じられるようにしたいのですが、どうしたらいいですか??