- ベストアンサー
Access レイアウト変更したサブフォーム内のクエリを保存しない方法
- WindowsXPのAccess2003で、メインフォーム内に設置したチェックボックスを使ってサブフォーム内のクエリの表示/非表示を切り替える方法について説明します。
- 閉じるボタンをクリックすると表示される保存メッセージを表示せずにクエリのレイアウトを保存せずに閉じる方法について説明します。
- DoCmd.CloseメソッドとacSaveNoオプションの使い方について解説します。初心者でもわかりやすく説明されているので、試してみてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> どのように記述すればメッセージを表示させず、かつレイアウト変更した > クエリを保存せずに閉じることができますか? 閉じるコマンドボタンのコードの該当部を、以下のようにしてみて下さい: (サブフォーム名を「埋め込み0」と想定したコードです) '使用しているクエリを、サブフォームから切り離します '(これにより、メインフォームを閉じるときの保存の対象外になります) 埋め込み0.SourceObject = "" 'メインフォームを閉じます '(フォーム名の代わりに「Me.Name」を使用しました) DoCmd.Close acForm, Me.Name, acSavePrompt ・・・以上です。 但し、これだけですと、メインフォームのデザインを変えた場合などに 巻き添えを食らい、サブフォームが空の状態が保存されてしまうことが あります(汗) ですので、フォームの「開く時」イベントに、次のようなコードを追加して おくことをお勧めします: 'サブフォームのソースオブジェクトが空になっていた場合は、 'クエリを埋め込み直します If 埋め込み0.SourceObject = "" Then 埋め込み0.SourceObject = "○○○(クエリ名)" End If <以下、参考・余談> Accessの「ファイル(F)」メニューの上書き保存(S)」や「名前を付けて 保存(A)」が使用可能な場合、サブフォームで列を非表示にした状態で それを行われると、非表示状態が保存されてしまいます。 その意味では、メインフォームの「開く時」イベントで、各フィールドの ColumnWidthの値も設定してしまう、という手もあるかと思います。 但し、そうしたとしても、クエリを単独で開いた場合には非表示になって しまいます。 クエリを単独で使用することもある場合は、サブフォームについては、 現在のクエリを使用した「データシート型」のフォームを新設し、それを ソースオブジェクトにした方がいいかもしれません。 (データシートビュー型のフォームにするには、フォームのプロパティ シート『書式』タブで、『既定のビュー』を「データシート」にします)
お礼
とても丁寧な説明ありがとうございました。 おかげさまで上手く作動してくれました! また、クエリを単独で使用することはないとは思いましたが、念のため参考通りにフォームを新設させていただきました。 ご親切な回答、心より感謝しております。 また、機会がありましたらよろしくお願いいたします★