プロが教える店舗&オフィスのセキュリティ対策術

フォームが50個くらいあるのですが
該当のフォームが存在するかvbaで取得したいのですが
If CurrentProject.AllForms("フォーム1").IsLoaded Then
のように、一発で取得する方法はありますか?

今は
Sub Sample1()
Dim DB As DAO.Database
Dim f As DAO.Document
Set DB = CurrentDb
Dim strForm As String
Dim flg As Boolean

strForm = "Fメインメニュー"

For Each f In DB.Containers!Forms.Documents
If strForm = f.Name Then
flg = True
Exit For
End If
Next

If flg = False Then
MsgBox strForm & "は存在しません"
End If

End Sub
のような感じで、すべてのフォームをループしているのですが
無駄が多い気がします。
改善策があればお願いします。

A 回答 (2件)

おそらくそういった方法でループしてチェックするしかないと思います。


50個というと多いような気がしますが、コンピュータにとっては一瞬の処理ですからそれほど気にしなくてもよいかと思います。

おわかりのことかもしれませんが、その処理を関数化すれば
If CurrentProject.AllForms("フォーム1").IsLoaded Then
と同じように使えますよ。

以下の関数を作る

Public Function ExistsForm(ByVal formName As String) As Boolean
Dim f As Object

For Each f In CurrentProject.AllForms
If f.Name = formName Then
ExistsForm = True
Exit Function
End If
Next
End Function

これを
if ExistsForm("フォーム1") then
のように呼びだせば、フォームの存在をチェックできます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2013/11/14 22:27

dcount("*" ,"msysObjects","type = -32768 and name = 'チェックしたいフォーム名'")


では。
http://www.nurs.or.jp/~ppoy/access/access/acQ017 …
↑解説はこちらにて。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2013/11/14 22:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A