MS Access Tips/Sample and VBA and Blog customize etc...

Accessウィンドウを表示しない方法

タイトル画像

現在はAccessのアプリケーションウィンドウが画面いっぱいに広がっていて、その中でフォームを操作しているのですが、見た目にはフォームだけ開いているという感じにしたいのです。 できるとこなら、標題のMicrosoft Accessという文字も消して、フォームだけを表示したいのですが、可能でしょうか?

このような質問を見かけました。似たよう質問はたまにあります。要するにAccessぽっく見せたくない。VB等のプログラミングツールで作成したアプリケーションのように見せたいということだと思います。

今回は、この方法について、探求してみます。

対応バージョン AC2000 AC2003

難易度:

概要

DbAccWinHide.jpg

フォームだけ表示する方法として、≪Access画面を非表示にする方法、Win32 API≫があります。 Accessウィンドウは最小化で開き、フォームの「ポップアップ」を「はい」にしておいてフォームを単独で表示するという方法になります。

この方法の場合、下記の点でちょっと不満です。

  1. 最小化すると、タスクバーに入らずに、デスクトップ左下に最小化する。そのためか上記のサンプルではフォームの最小化ボタンを非表示にしてます。
  2. レポートのプレビューを表示できない。AC2002以降ではレポートの「ポップアップ」が追加されたのでポップアップで表示できるが、メニューバーが使えないので、右クリックメニューから印刷するしかない。
  3. Vista, Access2003 の環境では、タスクバーのアイコンをクリックするとAccessウィンドウが開いてしまいます。一端開くとAccessウィンドウを最小化するとフォームも最小化されてしまいます。

そこで、下記のような方法を私は採用してます。

  1. Accessウィンドウのサイズを固定して、フォームは最大化して表示。参考 Accessウィンドウのサイズを固定する
  2. [ツール]-[起動時の設定]で「アプリケーションタイトル」を設定、「アプリケーションアイコン」もオリジナルなものに設定する。
  3. 標準の「メニューバー」を非表示にする。
  4. MDBのショートカットを作成して、ショートカットから起動するようにする。ショートカットにはオリジナルのアイコンを設定する。

実際は、Accessウィンドウを表示しないのではなく、Accessウィンドウとフォームを一体化するという表現が正しいのですが。
ここまですると一般ユーザーにはAccessとはほとんど気づきかれません。(見る人が見たら分かりますが。)

サンプルコード

フォームを作成します。名前は「MainPanel」とします。
フォームデザインビュー
フォームデザインビュー

[ツール]-[起動時の設定]で「フォーム/ページの表示」を「MainPanel」とします。

MDBと同じフォルダーにオリジナルのアイコンファイルを置いておきます。

標準モジュールに下記のようにコードを記述します。

MainPanel フォームモジュール

フォームの「MainPanel」のサイズ(フォームの幅、セクションの高さ)に合わせて、Accessウィンドウのサイズを固定して開きます。MDBと同じフォルダの指定したアイコンファイルを「アプリケーションアイコン」に自動で設定します。これは、Accessむかむか さんの [起動時にアイコンを設定する] のコードを利用させていただきました。

起動時に Accessウィンドウのサイズを保存しておいて、終了時にそのサイズに戻しています。このため終了時にちらつく場合があります。気になるようでしたら、ResetAccWinStyle をコメントアウトしてください。ただし、その場合は、別のMDBを開いたとき、この「MainPanel」のサイズで開くことになります。

Vista & Access2003 の環境で動作確認をしましたが、APIを使っていますしAccessのバージョンによる仕様の違い、また、オプション設定の違いでうまく動作しない場合もあるかも知れません。

追記:Access2007以降の場合は下記を参照してください。
Accessウィンドウを表示しない方法 Access2007以降版 - hatena chips

サンプルMDB が下記からダウンロードできます。
DbAccWinHide.zip (Access 2002-2003 形式 - 67kb)
DbAccWinHide_2k.zip (Access 2000 形式 - 65kb)

拍手する

3 Comments

sanyoko says..."初めまして"

初めまして。こんにちは。
こちらのコード、参考にさせて頂きました。
ありがとうございます。

うまく行った!と思ったのですが、いくつか疑問点がでてきてしまいました。
環境は2003のXPです。
(1)フォームのサイズを大体取得してくれるのですが、少しだけフォームが入りきらないときがあり、スクロールバーが出てしまうことがある
(2)全画面表示を指示している画面で、全画面より大きくAccessのWindowを開いてしまう
(3)(2)の画面のとき、真ん中くらいにAccessWindowの左上端が来てしまい、動かさなければならないときがある

以上です。
何かヒントを頂ければ嬉しいです。
初めましてで図々しくすみませんでした。

2010.06.14 16:57 | URL | #EGTCt1XI [edit]
hatena says..."疑問点について"

現在、2003のXPの環境がないので、動作確認して回答することができないので、あくまで、推測によるヒントだけですが。


(1)フォームのサイズを大体取得してくれるのですが、少しだけフォームが入りきらないときがあり、スクロールバーが出てしまうことがある

フォームの「スクロールバー」プロパティを「なし」に設定してみてください。

(2)全画面表示を指示している画面で、全画面より大きくAccessのWindowを開いてしまう

「全画面表示を指示している画面」というのが具体的に何を意味しているのか分かりません。
「画面」というのはフォームのことでしょうか。どのよう全画面表示を指示しているのでしょうか。

(3)(2)の画面のとき、真ん中くらいにAccessWindowの左上端が来てしまい、動かさなければならないときがある

同様に「画面」というのが何を指しているか分かりません。

まずは、ここで提示した方法は、Accessのウィンドウサイズは固定して、フォームを最大化して表示する方法だというのは理解されてますよね。また、そこから別フォームを開くときは、ポップアップで開くか、ダイアログモードで開くということになります。これによってAccessのウィンドウをユーザーに意識させないということです。

2010.06.16 21:41 | URL | #5uE6dEgY [edit]
sanyoko says...""

言葉足らずの質問にご丁寧なご回答をありがとうございます。
(2)(3)のときの全画面表示というのはフォームのサイズを全画面になるように指示しているということです。
form_LoadイベントでDoCmd.Maximizeと指示し、フォームを最大化しています。
(3)のときの画面というのは、Accessと一体化済みの画面なのでAccessの画面ということになります。

ちなみに私が編集しているシステムでは画面遷移で元の画面を閉じていますので、複数の画面の表示はしておりません。
毎回ご提示の関数を呼び、Accessのウインドウをリサイズしています。

2010.06.22 10:46 | URL | #EGTCt1XI [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/178-263966c5
該当の記事は見つかりませんでした。