Access2003 でフォームだけを表示したい

未だにAccess2003を使用しているのだが、あるデータベースを作成する時、フォームだけをデスクトップ上に表示したくなった

通常はAccessのメイン画面内で操作するのだが、ブラウザだとか他の資料を眺めながらデータ収集作業をしたいからである

使用しているAccessのバージョンは「Access2003 SP3」です

実現したいこと

  1. フォームだけを画面に表示したい
    Access のメイン画面を非表示にしたい
    非表示というのは、「デスクトップ上で最小化」するという意味である
    フォームだけを画面に表示したい
  2. 対象フォームから別フォームを開きたい
    この時も Access メイン画面は表示させたくない
    フォームから別フォームを開きたい
  3. 何らかの都合で対象フォームが開いている時、メイン画面を表示したとする
    この時に開いているフォームからメイン画面を非表示にする
    開いているフォームからメイン画面を非表示にする
  4. データベースは仕様が変わるなど、完成状態ではないので、メイン画面を表示させてノーマルモードでも操作したい場合がある
    この時にも簡単に対応できるようにしたい

作ったフォームの構成

  • メインフォーム
    ノーマルモードでも操作したい
  • フォーム1
    ●Access画面内での表示
    フォーム1 アクセス内部での表示
    ●デスクトップでの表示
    Accessメイン画面は非表示(最小化)
    フォーム1 デスクトップでの表示
  • フォーム2
    ●Access画面内での表示
    フォーム2 アクセス内部での表示
    ●デスクトップでの表示
    Accessメイン画面は非表示(最小化)
    フォーム2 デスクトップでの表示

Accessのメイン画面を非表示(最小化)にするには

Accessのメイン画面を非表示(最小化)するには以下の手順でできました

  1. 対象フォームの「ポップアップ」プロパティを「はい」にする
    ポップアッププロパティ
  2. 対象フォームの「開く時」に以下のイベントプロシージャを記述
    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番目までは実現できました

フォームからメイン画面を非表示にする

フォーム1 デスクトップでの表示

次に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くん に教えてもらいました

教えてくださった皆さん、ありがとうございました!!

コメント