未だにAccess2003を使用しているのだが、あるデータベースを作成する時、フォームだけをデスクトップ上に表示したくなった
通常はAccessのメイン画面内で操作するのだが、ブラウザだとか他の資料を眺めながらデータ収集作業をしたいからである
使用しているAccessのバージョンは「Access2003 SP3」です
実現したいこと
- フォームだけを画面に表示したい
Access のメイン画面を非表示にしたい
非表示というのは、「デスクトップ上で最小化」するという意味である
- 対象フォームから別フォームを開きたい
この時も Access メイン画面は表示させたくない
- 何らかの都合で対象フォームが開いている時、メイン画面を表示したとする
この時に開いているフォームからメイン画面を非表示にする
- データベースは仕様が変わるなど、完成状態ではないので、メイン画面を表示させてノーマルモードでも操作したい場合がある
この時にも簡単に対応できるようにしたい
作ったフォームの構成
- メインフォーム
- フォーム1
●Access画面内での表示
●デスクトップでの表示
Accessメイン画面は非表示(最小化)
- フォーム2
●Access画面内での表示
●デスクトップでの表示
Accessメイン画面は非表示(最小化)
Accessのメイン画面を非表示(最小化)にするには
Accessのメイン画面を非表示(最小化)するには以下の手順でできました
- 対象フォームの「ポップアップ」プロパティを「はい」にする
- 対象フォームの「開く時」に以下のイベントプロシージャを記述
Private Sub Form_Open(Cancel As Integer) If Me.PopUp = True Then 'Accessのメイン画面を最小化する DoCmd.RunCommand acCmdAppMinimize End If End Sub
この設定をするだけで、Accessメイン画面を非表示にする事ができます
2番目に実現したい事である「対象フォームから別フォームを開きたい」ですが
例えば「フォーム1」から「フォーム2」を呼び出したい場合
-
- 「フォーム2」の「ポップアップ」プロパティを「はい」にしておく
- 「フォーム2」のフォームの「開く時」イベントに上記2. のプロシージャを記述
- 「フォーム1」に「フォーム2を開く」ボタンを追加し「クリック時」イベントに以下を記述
Private Sub cmdフォーム2を開く_Click() 'フォーム2を開く DoCmd.OpenForm "フォーム2" End Sub
これで「実現したいこと」の2番目までは実現できました
フォームからメイン画面を非表示にする
次に3番目の「フォームからメイン画面を非表示にする」なんですが、上の「メイン画面を隠す」ボタンのクリック時イベントに次のプロシージャを記述しました
Private Sub cmdメイン画面を隠す_Click() 'まず自分自身を閉じる←こうしないとメイン画面内にフォームが表示されてしまう DoCmd.Close , , acSaveYes '再度このフォームを開く DoCmd.OpenForm "フォーム1" End Sub
対象フォームを一度閉じて、再度開くだけですね
ノーマルモードで操作したい場合
最後に4番目の「メイン画面を表示させてノーマルモードで操作したい」なんですが、これは簡単ですね
「メインフォーム」に対象となるフォームの「ポップアップ」プロパティを変更できるようにしました
具体的にはオプショングループの中にオプションボタン2つを配置して「True」なら「ポップアップ」プロパティを「はい」に「False」なら「いいえ」に設定できるようにしました
設定ボタンの「クリック時」に以下のプロシージャを記述します
Private Sub cmdポップアップ_Click() Dim frm(1) As String frm(0) = "フォーム1" frm(1) = "フォーム2" For i = 0 To 1 If Me!Optポップアップ = 0 Then DoCmd.OpenForm frm(i), acDesign Forms(frm(i)).PopUp = True Else DoCmd.OpenForm frm(i), acDesign Forms(frm(i)).PopUp = False End If DoCmd.Close , , acSaveYes Next End Sub
併せてメインフォームの「読み込み時」イベントに以下のプロシージャを記述することで、対象フォームの現在の「ポップアップ」プロパティを確認できるようにしました
Private Sub Form_Load() 'フォームのポップアッププロパティを確認 DoCmd.OpenForm "フォーム1", acDesign If Forms("フォーム1").PopUp = True Then Optポップアップ = 0 Else Optポップアップ = 1 End If DoCmd.Close acForm, "フォーム1" End Sub
これで、「実現したいこと」を全て実現できました!!
参考にさせていただいたサイト
今回は以下のサイトを参考にさせていただきました
ユーザーフォームだけで起動する
Excel VBA を学ぶなら moug モーグ | 即効テクニック |
最初にこちらのサイトを拝見させていただいてから、あとは ChatGPTくん に教えてもらいました
教えてくださった皆さん、ありがとうございました!!
コメント