- ベストアンサー
ACCESS非表示でフォームのみ表示して起動したい
- ACCESS2010のオプションのカレントデータベースのフォームの表示を(表示しない)にして、AutoExecマクロからMain()プロシージャを呼び出して起動時にフォーム(メイン画面)を表示していますが、ACCESSファイルを実行するとメイン画面とACCESSアプリケーション自体が表示されてしまいます。
- Form_OpenイベントプロシージャにShowWindow(Application.hWndAccessApp, SW_SHOWMINIMIZED)を記述したが、ACCESSアプリケーションは表示されなくなったが、フォーム(メイン画面)も表示されなくなってしまった。
- フォーム(メイン画面)だけ表示してACCESSアプリケーションは表示されないようにするにはどのようにすればよいのか。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
他の人の回答と一部ダブる部分もありますが、回答します。 (1) ファームを最大化するということですが ACCESSのウインドウに影響しないように ファームのウインドウだけを最大化するには どのように記述すればよいのでしょうか。 rc = ShowWindow(Application.hWndAccessApp, SW_SHOWMAXIMIZED) はAccessウィンドウを最大化するコードになりますから、削除してください。 2007以降の場合、フォームを最大化表示する方法は2つあります。 ひとつは、 [ファイル]-[オプション]-[カレントデータベース]-[ドキュメント ウィンドウ オプション]で 「タブ付きドキュメント」を選択して、「ドキュメントタブを表示する」のチェックを外す。 これで、フォームはAccessウィンドウ内で常に最大化された状態になります。 ふたつめは、 上記の[ドキュメント ウィンドウ オプション]で「ウィンドウを重ねて表示する」を選択します。 (これは2003以前と同じMDIウィンドウになります。) フォームのプロパティの「最小化/最大化ボタン」を「なし」に設定します。 フォームの「アクティブ時」のイベントプロシージャを下記のように設定します。 Private Sub Form_Activate() DoCmd.Maximize End Sub DoCmd.Maximize はフォームを最大化するコマンドです。 後者は2003以前にも対応する方法です。2007以降なら前者の方が簡単でしょう。 (2) 起動後にファームのサイズを変更して終了すると、 次回起動時にファームのサイズが変わってしまいます。 ファームのサイズは常に同じサイズにしておきたいのですが、 ファームのウインドウのサイズを固定(変更不可)にするには どのように記述すればよいのでしょうか。 「Accessウィンドウを表示しない方法 Access2007以降版」のコードのままでOKです。 このコードで、Accessウィンドウのサイズをフォームのデザイン時のサイズに固定して、 サイズ変更できないようにしています。 で、(1)の方法でフォームを、Accessウィンドウの中で最大化しますので、 結局フォームのサイズも固定化されることになります。 Accessウィンドウのサイズ=フォームのサイズに固定されるということです。 (3) 停止時にデザインビューなどで確認するために、 ACCESSのウインドウのサイズを変えると、 次回起動時に変更されたサイズになってしまいます。 ACCESSのウインドウのサイズは、 常に同じサイズにしておきたいのですが、 起動時にファームを最大化する前に、 ACCESSのウインドウのサイズを希望のサイズに設定するには、 どのように記述すればよいのでしょうか。 (2)でも説明したとおり、アクセスウィンドウのサイズをフォームのサイズに合わせてますので、 フォームのサイズを変更しない限りの常に同じサイズで開くはずです。 サンプルファイルもそうなっていますよね。 「Accessウィンドウを表示しない方法 Access2007以降版」のコードと同じにしてますか。
その他の回答 (7)
- hatena1989
- ベストアンサー率87% (378/433)
> 例えば、2007以降のACCESSにおいて、 > フォームのプロパティを「ポップアップ」にして、 > ShowWindow(Application.hWndAccessApp, SW_HIDE) > でAccessウィンドウを非表示にすると、 > 本来ならば、 > Accessウィンドウだけが非表示になり、 > フォームのウインドウは非表示の対象にはならないのに、 > なぜか分からないけれども結果だけ見ると、 > フォームのウインドウも非表示の対象になってしまう > ということなのでしょうか。 Access2007以降とその前のバージョンでは、おそらくフォームウィンドウの扱いが変更になったのでしょう。 タスクバーのアイコンをクリックした時やAccessウィンドウを閉じた時の動作が異なっています。 今は2003の環境がないので、詳細な違いは確認できませんが。 どうしてそうなるのか、というのは一ユーザーである私には分かりません。
- hatena1989
- ベストアンサー率87% (378/433)
ちょっと説明不足で誤解されそうな表現があったので修正します。 元) フォームのサイズを変更しない限りの常に同じサイズで開くはずです。 修正) フォームのデザイン時のサイズを変更しない限りの常に同じサイズで開くはずです。 ついでに、「MDI親子関係の切り離し」に関して、 フォームを「ポップアップ」にすることで、MDI親子関係の切り離しができるのですが、 Access2003まではその方法でうまくいってました。 ところが、2007以降、Win7以降、の環境だと、No.3で回答したようにうまくいかないのです。 (タスクバーアイコンのクリックでAccessウィンドウが表示されてしまう。) そのために、 http://plus-sys.jugem.jp/?eid=475 のように 「フォームをサブクラス化し、Windowsからの最大化命令(メッセージ)を監視し、最大化されれば、即最小化」 する方法か、 「Accessウィンドウを表示しない方法 Access2007以降版」の方法の どちらかになるというのが現状です。
補足
hatena1989さん 詳しい説明ありがとうございます。 #2の方法で見かけ上フォームのみが表示されて、 フォームのサイズも固定化することができました。 なお、#1の方法に関してですが、 よく分からないことがありますので教えてください。 「2007以降では、タスクバーのアイコンをクリックすると Accessのウィンドウが開いてしまうのです。 で、Accessのウィンドウを最小化すると フォームも消えてしまいます。」(NO3より) の部分ですが (非表示ではなく)最小化しているから タスクバーのアイコンのクリックで開くという単純なことではなく、 本来は、タスクバーのアイコンをクリックしても Accessのウィンドウは開かないということなのでしょうか。 また、Accessのウィンドウを最小化すると、 フォームも消えてしまうというのがよく分からないのですが、 これは、最小化した場合だけでなく、非表示にした場合でも 同じことが言えるのでしょうか。 例えば、2007以降のACCESSにおいて、 フォームのプロパティを「ポップアップ」にして、 ShowWindow(Application.hWndAccessApp, SW_HIDE) でAccessウィンドウを非表示にすると、 本来ならば、 Accessウィンドウだけが非表示になり、 フォームのウインドウは非表示の対象にはならないのに、 なぜか分からないけれども結果だけ見ると、 フォームのウインドウも非表示の対象になってしまう ということなのでしょうか。 よろしくお願いします。
- chie65536(@chie65535)
- ベストアンサー率44% (8799/19955)
>この挙動ですが、ShowWindow()では >ACCESSのウインドウとフォームのウインドウの両方に作用するのでしょうか。 ShowWindowの作用は「指定したウィンドゥハンドルのウィンドゥ」に対して作用します。 MDIウィンドウ環境下では、MDI子ウィンドゥは、親のウィンドゥの中でのみ動作しますから、親が最小化されれば、すべて見えなくなります。 これは、Accessに限った話ではありません。MDIアプリケーションすべてに共通です。 なので「子だけ別の動きにしたい」と言う場合は「MDI親子関係の切り離し」をしないといけません。
お礼
chie65535さん 最初は、不明な点を1つずつクリアしていけば、 なんとかできそうな感じがしていたのですが、 どうもこの方法では難しそうな感じがしてきましたので、 今回はhatena1989さんに教えていただいた#2の方法で 対応させていただくことにします。 ありがとうございました。
補足
chie65535さん 回答ありがとうございます。 頂きました回答をもとにいろいろやってはいるのですが うまくいきませんので、基本的なことの確認ですが 教えてください。 1) フォームのウインドウのプロパティの「ポップアップ」を 「はい」にすれば、 ACCESSのウインドウとフォームのウインドウの MDI親子関係は切り離されるのでしょうか。 (補足) フォームのウインドウはACCESSのウインドウの外に 移動することができるし、ACCESSのウインドウを 最小化してもフォームのウインドウは表示されて いますのでMDI親子関係は切り離されているように 見えるのですが? 2) MDI親子関係を切り離せば、 Public Const SW_HIDE = 0 ' ウィンドウ非表示 ShowWindow(Application.hWndAccessApp, SW_HIDE) で、フォームのウインドウは表示したままで、 ACCESSのウインドウのみを非表示にすることが できるのでしょうか。 (補足) 現状では、ACCESSのウインドウとフォームの ウインドウの両方が非表示になってしまっています? 3) もし、できるのであれば、 最初の質問の内容のコード(注)のように、 ACCESSのウインドウを非表示で、 フォームのウインドウを表示するサンプルコード を示していただけると助かります。 (ACCESS2010,Windows7) (注) SW_SHOWMINIMIZEDはSW_HIDEと読み替えてください SW_SHOWMINIMIZEDの宣言を忘れていたので 0として扱われて、結果的には、 意図したSW_HIDEとして動作しています。 よろしくお願いします。
- chayamati
- ベストアンサー率41% (260/624)
>起動時にフォーム(メイン画面)を表示しています。 ----------------------------------------------- これは、コーディング(VBA)は不要です。 ファイルを起動時フォームを一つだけ開く事が出来ます。 ACCESS2010では次の手順です 【ファイル】⇒【オプション】⇒【カレントデータベース】 ⇒【フォームの表示窓の右端のv】 ⇒【フォームのリストより一つを選ぶ】⇒【OK】 この機能はACCESS97からありましたが【オプション】への入り方が違います。 >フォーム(メイン画面)だけ表示して 左端に表示されるナビゲーションウィンドのことですね ナビゲーションウィンド非表示にするには上端のシャッターバーを閉じる事が出来ます シャッターバーを右クリック⇒ナビゲーションオプションで表示するものを選ぶこともできます。 >ACCESSアプリケーションは表示されないようにしたいのですがどのようにすればよいのでしょうか。 メイン画面にボタン(コマンドボックスと呼ぶ)配置してこのボックスに各アプリを適用する
お礼
chayamatiさん 起動時にフォームを表示する方法 ナビゲーションウインドウの表示・非表示の方法 ナビゲーションオプションで表示するアイテムを選択する方法 教えていただきましてありがとうございました。
- hatena1989
- ベストアンサー率87% (378/433)
#1 の回答の方法は、Access2003までは良かったのですが、 2007以降では、タスクバーのアイコンをクリックするとAccessのウィンドウが開いてしまうのです。 で、Accessのウィンドウを最小化するとフォームも消えてしまいます。 これに対処するには、下記で紹介されているような方法になります。 【Access】Access2010でフォームのみ表示(制限ありの検証なしの暫定版)。 | プラプラ式技術系 Access流! http://plus-sys.jugem.jp/?eid=475 フォームをサブクラス化し、Windowsからの最大化命令(メッセージ)を監視し、最大化されれば、即最小化するという非常に難易度が高い方法になります。また、強制終了という危険性も伴います。 上記のページ内で、「Access本体をフォームと同サイズに調整し、その中でフォームを最大化して表示するという手法」のリンクがありますが、こちらの方法は、#2 で紹介した方法になります。 私としてはこちらの方法をお薦めします。
- hatena1989
- ベストアンサー率87% (378/433)
発想を変えて、 フォームは最大化、 ACCESSのりボン、ナビゲーションウィンドウは非表示、 という方法にしたほうが自然な動作になります。 下記をキーワードにWEB検索するといろいろ例が見つかると思います。 Accessウィンドウ 非表示 2007以降
補足
hatena1989さん 回答ありがとうございます。 サブクラスを使うのは強制終了という危険性も伴います ということなので#2で進めたいと思います。 「Accessウィンドウを表示しない方法 Access2007以降版」 のコードを見てみましたが、いろいろなAPIが 使われていて複雑でよく理解できませんでした。 以下のようなことがもう少し簡単に記述できないでしょうか。 (1) ファームを最大化するということですが ACCESSのウインドウに影響しないように ファームのウインドウだけを最大化するには どのように記述すればよいのでしょうか。 以下のようにすると両方のウインドウが 画面いっぱいに拡大されてしまいます。 Public Const SW_SHOWMAXIMIZED = 3 ' ウィンドウを最大化 Dim rc As Long rc = ShowWindow(Application.hWndAccessApp, SW_SHOWMAXIMIZED) (2) 起動後にファームのサイズを変更して終了すると、 次回起動時にファームのサイズが変わってしまいます。 ファームのサイズは常に同じサイズにしておきたいのですが、 ファームのウインドウのサイズを固定(変更不可)にするには どのように記述すればよいのでしょうか。 (3) 停止時にデザインビューなどで確認するために、 ACCESSのウインドウのサイズを変えると、 次回起動時に変更されたサイズになってしまいます。 ACCESSのウインドウのサイズは、 常に同じサイズにしておきたいのですが、 起動時にファームを最大化する前に、 ACCESSのウインドウのサイズを希望のサイズに設定するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。
- chie65536(@chie65535)
- ベストアンサー率44% (8799/19955)
>フォーム(メイン画面)だけ表示してACCESSアプリケーションは表示されないようにしたいのですがどのようにすればよいのでしょうか。 http://www.accessclub.jp/bbs/0060/beginers23312.html 今のコードのままで > 1)フォーム全てを「ポップアップ」にする。(プロパティで設定) を追加すれば、上手く行くかも。 現状で上手く行かないのは、フォームがポップアップになってないからだと思います。
補足
chie65535さん 回答ありがとうございます。 フォームのプロパティの「ポップアップ」は「はい」になっています。 また、ACCESSもフォームも表示されなかったのは Public Const SW_SHOWMINIMIZED = 2 の宣言がしていなかったため0と解釈されて非表示になっていました。 Public Const SW_SHOWMINIMIZED = 2 を宣言するとACCESSは最小化されてフォームが通常表示されました。 この挙動ですが、ShowWindow()では ACCESSのウインドウとフォームのウインドウの両方に作用するのでしょうか。 ACCESSのウインドウとフォームのウインドウのどちらか一方にだけ作用することはできるのでしょうか。 例えば、ACCESSのウインドウだけを非表示してフォームのウインドウは通常表示にすることはできるのでしょうか。 よろしくお願いします。
お礼
hatena1989さん 最初に教えていただきました#2の方法で解決を図りたいと思います。 #1の方法でなぜうまくいかないのかその理由が分かれば、 今後のためにおさえておきたかったのですが、 おそまきながらだんだん状況がわかってきました。 こういう仕様になっていると受け止めて、 これ以上この問題は追求しないようにします。 このことが分かっただけでも質問してよかったと思います。 いろいろ対応ありがとうございました。