ACCESS非表示でフォームのみ表示して起動したい

このQ&Aのポイント
  • ACCESS2010のオプションのカレントデータベースのフォームの表示を(表示しない)にして、AutoExecマクロからMain()プロシージャを呼び出して起動時にフォーム(メイン画面)を表示していますが、ACCESSファイルを実行するとメイン画面とACCESSアプリケーション自体が表示されてしまいます。
  • Form_OpenイベントプロシージャにShowWindow(Application.hWndAccessApp, SW_SHOWMINIMIZED)を記述したが、ACCESSアプリケーションは表示されなくなったが、フォーム(メイン画面)も表示されなくなってしまった。
  • フォーム(メイン画面)だけ表示してACCESSアプリケーションは表示されないようにするにはどのようにすればよいのか。
回答を見る
  • ベストアンサー

ACCESS非表示でフォームのみ表示して起動したい

ACCESS2010のオプションのカレントデータベースのフォームの表示を(表示しない)にして、AutoExecマクロから以下のMain()プロシージャを呼び出して 起動時にフォーム(メイン画面)を表示しています。 ----------------------------------------------- Function Main() As Integer 'メイン画面の表示 DoCmd.OpenForm "メイン画面", acNormal Main = 1 End Function ----------------------------------------------- このままでは、ACCESSファイル(.accdb)をダブルクリックして実行するとメイン画面とその背後にACCESSアプリケーション自体が表示されてしまいます。 そこで、Form_Openイベントプロシージャに ----------------------------------------------- Dim rc As Long rc = ShowWindow(Application.hWndAccessApp, SW_SHOWMINIMIZED) ----------------------------------------------- を記述したのですが、ACCESSアプリケーションは表示されなくなったのですが、フォーム(メイン画面)も表示されなくなってしまいました。 フォーム(メイン画面)だけ表示してACCESSアプリケーションは表示されないようにしたいのですがどのようにすればよいのでしょうか。 よろしくお願いします。

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

  • ベストアンサー
回答No.6

他の人の回答と一部ダブる部分もありますが、回答します。 (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)

回答No.8

> 例えば、2007以降のACCESSにおいて、 > フォームのプロパティを「ポップアップ」にして、 > ShowWindow(Application.hWndAccessApp, SW_HIDE) > でAccessウィンドウを非表示にすると、 > 本来ならば、 > Accessウィンドウだけが非表示になり、 > フォームのウインドウは非表示の対象にはならないのに、 > なぜか分からないけれども結果だけ見ると、 > フォームのウインドウも非表示の対象になってしまう > ということなのでしょうか。 Access2007以降とその前のバージョンでは、おそらくフォームウィンドウの扱いが変更になったのでしょう。 タスクバーのアイコンをクリックした時やAccessウィンドウを閉じた時の動作が異なっています。 今は2003の環境がないので、詳細な違いは確認できませんが。 どうしてそうなるのか、というのは一ユーザーである私には分かりません。

yam2012
質問者

お礼

hatena1989さん 最初に教えていただきました#2の方法で解決を図りたいと思います。 #1の方法でなぜうまくいかないのかその理由が分かれば、 今後のためにおさえておきたかったのですが、 おそまきながらだんだん状況がわかってきました。 こういう仕様になっていると受け止めて、 これ以上この問題は追求しないようにします。 このことが分かっただけでも質問してよかったと思います。 いろいろ対応ありがとうございました。

回答No.7

ちょっと説明不足で誤解されそうな表現があったので修正します。 元) フォームのサイズを変更しない限りの常に同じサイズで開くはずです。 修正) フォームのデザイン時のサイズを変更しない限りの常に同じサイズで開くはずです。 ついでに、「MDI親子関係の切り離し」に関して、 フォームを「ポップアップ」にすることで、MDI親子関係の切り離しができるのですが、 Access2003まではその方法でうまくいってました。 ところが、2007以降、Win7以降、の環境だと、No.3で回答したようにうまくいかないのです。 (タスクバーアイコンのクリックでAccessウィンドウが表示されてしまう。) そのために、 http://plus-sys.jugem.jp/?eid=475 のように 「フォームをサブクラス化し、Windowsからの最大化命令(メッセージ)を監視し、最大化されれば、即最小化」 する方法か、 「Accessウィンドウを表示しない方法 Access2007以降版」の方法の どちらかになるというのが現状です。

yam2012
質問者

補足

hatena1989さん 詳しい説明ありがとうございます。 #2の方法で見かけ上フォームのみが表示されて、 フォームのサイズも固定化することができました。 なお、#1の方法に関してですが、 よく分からないことがありますので教えてください。 「2007以降では、タスクバーのアイコンをクリックすると  Accessのウィンドウが開いてしまうのです。 で、Accessのウィンドウを最小化すると フォームも消えてしまいます。」(NO3より) の部分ですが (非表示ではなく)最小化しているから タスクバーのアイコンのクリックで開くという単純なことではなく、 本来は、タスクバーのアイコンをクリックしても Accessのウィンドウは開かないということなのでしょうか。 また、Accessのウィンドウを最小化すると、 フォームも消えてしまうというのがよく分からないのですが、 これは、最小化した場合だけでなく、非表示にした場合でも 同じことが言えるのでしょうか。 例えば、2007以降のACCESSにおいて、 フォームのプロパティを「ポップアップ」にして、 ShowWindow(Application.hWndAccessApp, SW_HIDE) でAccessウィンドウを非表示にすると、 本来ならば、 Accessウィンドウだけが非表示になり、 フォームのウインドウは非表示の対象にはならないのに、 なぜか分からないけれども結果だけ見ると、 フォームのウインドウも非表示の対象になってしまう ということなのでしょうか。 よろしくお願いします。

  • chie65535
  • ベストアンサー率43% (8508/19344)
回答No.5

>この挙動ですが、ShowWindow()では >ACCESSのウインドウとフォームのウインドウの両方に作用するのでしょうか。 ShowWindowの作用は「指定したウィンドゥハンドルのウィンドゥ」に対して作用します。 MDIウィンドウ環境下では、MDI子ウィンドゥは、親のウィンドゥの中でのみ動作しますから、親が最小化されれば、すべて見えなくなります。 これは、Accessに限った話ではありません。MDIアプリケーションすべてに共通です。 なので「子だけ別の動きにしたい」と言う場合は「MDI親子関係の切り離し」をしないといけません。

yam2012
質問者

お礼

chie65535さん 最初は、不明な点を1つずつクリアしていけば、 なんとかできそうな感じがしていたのですが、 どうもこの方法では難しそうな感じがしてきましたので、 今回はhatena1989さんに教えていただいた#2の方法で 対応させていただくことにします。 ありがとうございました。

yam2012
質問者

補足

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% (254/607)
回答No.4

>起動時にフォーム(メイン画面)を表示しています。 ----------------------------------------------- これは、コーディング(VBA)は不要です。 ファイルを起動時フォームを一つだけ開く事が出来ます。 ACCESS2010では次の手順です 【ファイル】⇒【オプション】⇒【カレントデータベース】 ⇒【フォームの表示窓の右端のv】 ⇒【フォームのリストより一つを選ぶ】⇒【OK】 この機能はACCESS97からありましたが【オプション】への入り方が違います。 >フォーム(メイン画面)だけ表示して 左端に表示されるナビゲーションウィンドのことですね ナビゲーションウィンド非表示にするには上端のシャッターバーを閉じる事が出来ます シャッターバーを右クリック⇒ナビゲーションオプションで表示するものを選ぶこともできます。 >ACCESSアプリケーションは表示されないようにしたいのですがどのようにすればよいのでしょうか。 メイン画面にボタン(コマンドボックスと呼ぶ)配置してこのボックスに各アプリを適用する

yam2012
質問者

お礼

chayamatiさん 起動時にフォームを表示する方法 ナビゲーションウインドウの表示・非表示の方法 ナビゲーションオプションで表示するアイテムを選択する方法 教えていただきましてありがとうございました。

回答No.3

#1 の回答の方法は、Access2003までは良かったのですが、 2007以降では、タスクバーのアイコンをクリックするとAccessのウィンドウが開いてしまうのです。 で、Accessのウィンドウを最小化するとフォームも消えてしまいます。 これに対処するには、下記で紹介されているような方法になります。 【Access】Access2010でフォームのみ表示(制限ありの検証なしの暫定版)。 | プラプラ式技術系 Access流! http://plus-sys.jugem.jp/?eid=475 フォームをサブクラス化し、Windowsからの最大化命令(メッセージ)を監視し、最大化されれば、即最小化するという非常に難易度が高い方法になります。また、強制終了という危険性も伴います。 上記のページ内で、「Access本体をフォームと同サイズに調整し、その中でフォームを最大化して表示するという手法」のリンクがありますが、こちらの方法は、#2 で紹介した方法になります。 私としてはこちらの方法をお薦めします。

回答No.2

発想を変えて、 フォームは最大化、 ACCESSのりボン、ナビゲーションウィンドウは非表示、 という方法にしたほうが自然な動作になります。 下記をキーワードにWEB検索するといろいろ例が見つかると思います。 Accessウィンドウ 非表示 2007以降

yam2012
質問者

補足

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のウインドウのサイズを希望のサイズに設定するには、   どのように記述すればよいのでしょうか。 よろしくお願いします。

  • chie65535
  • ベストアンサー率43% (8508/19344)
回答No.1

>フォーム(メイン画面)だけ表示してACCESSアプリケーションは表示されないようにしたいのですがどのようにすればよいのでしょうか。 http://www.accessclub.jp/bbs/0060/beginers23312.html 今のコードのままで > 1)フォーム全てを「ポップアップ」にする。(プロパティで設定) を追加すれば、上手く行くかも。 現状で上手く行かないのは、フォームがポップアップになってないからだと思います。

yam2012
質問者

補足

chie65535さん 回答ありがとうございます。 フォームのプロパティの「ポップアップ」は「はい」になっています。 また、ACCESSもフォームも表示されなかったのは Public Const SW_SHOWMINIMIZED = 2 の宣言がしていなかったため0と解釈されて非表示になっていました。 Public Const SW_SHOWMINIMIZED = 2 を宣言するとACCESSは最小化されてフォームが通常表示されました。 この挙動ですが、ShowWindow()では ACCESSのウインドウとフォームのウインドウの両方に作用するのでしょうか。 ACCESSのウインドウとフォームのウインドウのどちらか一方にだけ作用することはできるのでしょうか。 例えば、ACCESSのウインドウだけを非表示してフォームのウインドウは通常表示にすることはできるのでしょうか。 よろしくお願いします。

関連するQ&A

  • ACCESS フォームの値がすぐに表示されない

    フォームの値がすぐに表示されない。 宜しくお願い致します。皆様の知恵をお貸しください。 WinXPでACCESS2000を使っております。 テーブル_在庫には 取引先|商品名|買取金額|売上金額|日付のフィールドがあり A社|みかん|0|10000|2012/11/13 A社|りんご|10000|0|2012/11/13 B社|ぶどう|5000|0|2012/11/13 C社|かき|0|3000|2012/11/13 というレコードがあります。 フォーム_取引先のコンボボックスで、A社を選びコマンドボタンで、 クエリ_取引先買取、クエリ_取引先売上 を実行して、A社だけの取引を抽出し、その結果を フォーム_取引先買取とフォーム_取引先売上 に、表形式で表示させています。 このままでは、フォームが2つになるので、新たに基になるテーブルも クエリも持たない、フォーム_売買を作りました。 このフォーム_売買にテキストボックスを6つ作り次のようにしました。 テキストボックス|コントロールソース ---------------------------------------- テキスト1(取引先)|=Forms![取引先]![コンボ1] テキスト2(買取金額)|=Forms![買取]![テキスト1] テキスト3(売上金額)|=Forms![売上]![テキスト1] テキスト4(買取報償料)|非連結 テキスト5(売上報償料)|非連結 テキスト6(合計金額)|=[テキスト2]+[テキスト4]-[テキスト3]-[テキスト5] ここで、問題になっているのが、フォーム_売買を表示させた時に、テキスト1は 普通にA社と表示されているのですが、テキスト2とテキスト3に金額が表示され ません。 しかし、テキスト4もしくはテキスト5に金額を入力すると、表示されるようになり ます。 テキスト4とテキスト5のどちらかには必ず金額を入力するので、このままでも とりあえずは計算出来ているのですが、できれば、フォームが表示された時に 初めからテキスト2とテキスト3には金額が入っていたほうがいいと思い、あれ これ試してみたのですが、出来ませんでした。 フォーム_取引先のコマンドボタンは次のように実行しています。 Dim stDocName As String Dim stDocName1 As String stDocName = "取引先売上" DoCmd.OpenQuery stDocName, acNormal, acEdit stDocName1 = "取引先買取" DoCmd.OpenQuery stDocName1, acNormal, acEdit DoCmd.OpenForm stDocName, acNormal DoCmd.OpenForm stDocName1, acNormal DoCmd.OpenForm "売買", acNormal どうすれば、フォーム_売買が表示された時に、テキスト2とテキスト3に金額が 入っているようになるのでしょうか。 素人が見よう見まねで作っておりますので、おかしい点が多々あるかと思い ますが、ご教授のほど、よろしくお願い致します。

  • Access すべてのフォームを開く

    おしえてくださいm__m AccessにてWindowを最小化した後に現在開いているフォームを開くVBAを 作成しようとしていますがうまくいきません。 現在はWindowを最小化した後一つのフォームを開くVBAは下記の通り作成しました DoCmd.RunCommand acCmdAppMinimize DoCmd.OpenForm "メインフォーム", acNormal しかしながら現在開いているすべてのフォームをAccess Windowを最小化した後に 開くVBAはどのように記載すればいいでしょうか 皆さまのお知恵をかしてくださいm__m

  • アクセスのメインフォームのみの表示について。

    アクセスでデータ管理をしていますが、画面上にメインフォームのみを表示させたいのですが、どのようにしたらアクセスの編集画面などを消せるのでしょうか?現在メインフォームを自動で表示するようにしてありますが、必ず、アクセスのファイル、編集、表示、挿入などが上に表示され、編集枠の中にメインフォームが真ん中に表示される状態です。どこかで見たことがあるのは、そのメインフォームのみ真ん中に表示され、後ろにはウインドウズの画面があるものでした。どなたか教えていただけないでしょうか。よろしくお願いいたします。

  • フォームから別フォームを開くには?

    こんにちは。 Access2010を使っています。 開いているフォームから別のフォームを開きたいのですが、その後ろ側のみにワイルドカード(「*」マーク)を入れたいのですが、上手くいきません。 いろいろやってみましたが、「メモリ不足です」となってしまい、上手くいきません。下記コードにどのようにしてワイルドカードを入れたらよいでしょうか? DoCmd.OpenForm "開きたいフォーム名", acNormal, "", "[キー名]=[Forms]![開いているフォーム名]![キー名]", , acNormal ご教授よろしくお願い致します。

  • 「DoCmd.OpenForm」が実行できない(vbaでフォームを開きたい)

    「フォーム1を開く」vbaで行ないたいのですが エラーになってしまいます。 Sub test1() DoCmd.OpenForm , acNormal, フォーム1 End Sub は「変数が定義されていません」と表示され (「変数の宣言を強制する」にチェックを入れています) Sub test2() DoCmd.OpenForm , acNormal, "フォーム1" End Sub は「引数は省略できません」となります。 Sub test1() DoCmd.OpenForm , フォーム1, acNormal End Sub Sub test2() DoCmd.OpenForm , "フォーム1", acNormal End Sub これにしても同じでした。 「OpenForm」をヘルプで調べてみたところ 「expression 」と「FormName」が「 必ず指定します。」でした。 「expression 」がないからだめなのでしょうか? すいません、助けてください。 よろしくお願いします。

  • ACCESS フォームの操作

    下記のようなことが可能であれば、方法をご教授願います。 まず、構造 フォーム2つ 1.メニュー…コマンドボタン2つ(BT11とBT12) 2.メイン  …コマンドボタン3つ(BT21とBT22とBT23) やりたいことは、 BT11とBT12のクリックイベントでどちらもメインフォームを表示 ただし、 BT11クリック時はacFormAddでメインフォーム上にBT21、BT23だけを表示し、 BT12クリック時はacReadOnlyメインフォーム上にBT22、BT23だけを表示 です。 フォームの表示は出来ましたが、 コマンドボタンの表示/非表示が切り替わりません。 sub BT11_Click() 1行目 DoCmd.OpenForm "フォーム名", acNormal, , acFormAdd, acDialog 2行目 Forms!メインフォーム!BT21.Visible = True end sub BT11をクリックしたときは、1行目でとまっているようです。 メインフォームを閉じるときに2行目を実行しようと するようで、メインフォームがないというエラーがでます。 宜しくお願い致します。

  • Access64bitへ移行後、フォーム起動不安定

    Access64bit移行後、特定のフォームの起動が不安定になりました。 3-4回目にようやく開くことができます。 ・開くことができない時は、エラーメッセージなし、Accessそのものが、異常終了しています。 ・一旦開いてしまえば、問題なく使用できます。 ・コマンドボタンで開きます。   DoCmd.OpenForm "フォーム名", acNormal, "", "", , acNormal ・データDBは、社内ネットワーク上のサーバにあります。各自のパソコンにあるAccessから、リンクテーブルで使用しています。 ・Access32bitでは上記不具合はありません。 エラーもなく、静かに異常終了してしまうため、原因の特定ができなくて困っています。 助言等お願いします

  • Accessでのフォーム表示

    こんにちは。 現在、Access2003で顧客管理の アプリケーションを作成しています。 ログイン画面でユーザ名とパスワードを入力するテキストを作成し、 コマンドボタンを1つ作成しました。 ユーザ名とパスワードを入力し、ボタンを押すと 認証をして、次のメインフォームを表示するようなものを 作成したいのですが、 別フォームをどうやって表示するのか分かりません。 Visual Basic にはshowメソッドがあったのですが Accessには存在しないようなのですが、どのようにして表示すればよいのでしょうか? どなたかご教授お願いします。

  • ACCESS2007で起動時にフォームのみにしたい

    ACCESS2007の起動時初期画面の設定についての質問です。 初期画面として、フォームを表示させたいのですが、左端に ACCESSオブジェクト欄などが表示されていて、アプリケーションっぽくありません。 表示されるのをフォームだけにしたいのですが、どのようにすれば よいのでしょうか。 よろしくお願いします。 ※あまりACCESSは慣れていません。

  • Access2000:フォームのテキストフォームに値を代入Part2

    前回も質問して、また違った改良が入りそうなので質問させていただきます。 マクロに「フォームを開く」を登録し、テキストフォーム値を入れることをこれまで手動でしてきました。 今回VBAを使って自動フォーム登録したいと考えています。 上記マクロをVisualBasic変換し、新たなマクロにこのVisualBasicをプロシージャとして登録させます。 DoCmd.OpenForm "フォーム名", acNormal, "", "", , acNormal 変換後上記のようなフォームを立ち上げるプログラムが生成されました。上記フォームのテキストフォーム部に値を代入させたいばあいどういう記述をしてあげればよろしいでしょうか? テキストフォームの名前は”年月”です。 Me![年月]=date ではうまくいきません。 よろしくお願いいたします。

専門家に質問してみよう