• ベストアンサー

フォーム1が開いているのならMsgBoxを表示

Sub マクロ() If フォーム1が開いているのなら Then MsgBox "フォーム1は開いています" End If End Sub アクセスで上記の事をやりたいのですが、コードを教えていただけますか? Sub test() Dim myForm As Form For Each myForm In Forms Debug.Print myForm.Name Next End Sub で、フォームをループできるのですが、いちいちループさせずに、フォーム1だけをつかんで、 起動している(開いている)ならメッセージボックスを表示させたいです。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

2002でIsloadedプロパティが存在するならば、関数名が かぶってしまったようですね。それでは関数名を以下のように 変更し、プロシージャの中の関数名も変更します。 Function funcIsLoaded(ByVal strFormName As String) As Boolean ' 指定したフォームがフォーム ビューまたはデータシート ビューで開かれている場合 True を返し ます。 Const conObjStateClosed = 0 Const conDesignView = 0 If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then If Forms(strFormName).CurrentView <> conDesignView Then funcIsLoaded = True End If End If End Function それから、使い方のところでも、 Sub マクロ() If funcIsLaoded("フォーム1") = True Then MsgBox "フォームは開いています" Else MsgBox"フォームは開いていません" End If End Sub のように関数名を変更します。

cdbvtnyjv4
質問者

お礼

ご回答ありがとうございます。

その他の回答 (2)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

if currentproject.allforms("フォーム1").isloaded then msgbox "開いてます" ・・・ にて。Access2002以降なら使えます。 ※『フォーム1』が存在しない場合ではエラーになります。

cdbvtnyjv4
質問者

お礼

Sub マクロ() If CurrentProject.AllForms("フォーム1").IsLoaded Then MsgBox "開いてます" End If End Sub でうまく出来ました。ありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

方法はいろいろあるのですが、昔からの定番で、 Accessに付属しているサンプルのNorthWindow というファイルにある方法で。 以下のコードを標準モジュールに貼り付け保存します。 Function IsLoaded(ByVal strFormName As String) As Boolean ' 指定したフォームがフォーム ビューまたはデータシート ビューで開かれている場合 True を返します。 Const conObjStateClosed = 0 Const conDesignView = 0 If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then If Forms(strFormName).CurrentView <> conDesignView Then IsLoaded = True End If End If End Function 使い方は、 Sub マクロ() If IsLaoded("フォーム1") = True Then MsgBox "フォーム1は開いています" End If End Sub

cdbvtnyjv4
質問者

お礼

標準モジュールにそっくりそのまま Option Compare Database Option Explicit Function IsLoaded(ByVal strFormName As String) As Boolean 指定したフォームがフォーム ビューまたはデータシート ビューで開かれている場合 True を返します。 Const conObjStateClosed = 0 Const conDesignView = 0 If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then If Forms(strFormName).CurrentView <> conDesignView Then IsLoaded = True End If End If End Function Sub マクロ() If IsLaoded("フォーム1") = True Then MsgBox "フォームは開いています" End If End Sub を貼り付けたのですが、 If IsLaoded("フォーム1") = True Thenの IsLaodedの部分でコンパイルエラーになってしまいました。

関連するQ&A

専門家に質問してみよう