#005 フォームの状態を知るには? VBA

特定のフォームが開いているのか、閉じているのか、あるいは編集されているのかどうかなど、フォームの状態を知るには「SysCmd」関数を使います。次の例では"フォーム1"の状態を調べてメッセージ表示します。
    Dim varRet As Variant

    'フォーム "フォーム1" の状態を取得します。
    varRet = SysCmd(acSysCmdGetObjectState, acForm, "フォーム1")

    '「SysCmd」が返す値から"フォーム1" の状態を表示します。
    Select Case varRet
      Case 0
        MsgBox "開いていないか、存在しません"
      Case 1
        MsgBox "開いています"
      Case 5
        MsgBox "新しいフォームです"
      Case 7
        MsgBox "編集されましたが、まだ保存されていません"
    End Select  
ヘルプなどを見ると、「SysCmd」が返す値には acObjStateOpen、acObjStateNew、acObjStateDirty などの定数をありますが、なぜかこれでは Select Case で引っかかってくれません。そこで上記のような数値を直接指定しました。

また、上記の acForm とある部分に他のオブジェクトを表す定数(acTable、acQuery、acReport、acMacro、acModule)を指定することによって、それらのオブジェクトの状態も同様に取得することができます。

また、単純にフォームが開いているかどうか知るには次のようなコードを使います。

    If SysCmd(acSysCmdGetObjectState, acForm, "フォーム1") <> 0 Then
      MsgBox "開いています"
    Else
      MsgBox "開いていません"
    End If
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved