アプリ版:「スタンプのみでお礼する」機能のリリースについて

フォーム1とフォーム2がありまして、どちらもvbaで削除したいのですが

Sub Sample()
Dim obj As AccessObject

For Each obj In CurrentProject.AllForms
Debug.Print obj.Name & "を削除します"
DoCmd.DeleteObject acForm, obj.Name
Debug.Print obj.Name & "を削除しました"
Next

End Sub

これを実行すると、フォーム2は削除できるのですが、
Nextの部分で、
実行時エラー'-2147467259(80004005)'
オートメーションエラーです。エラーを特定できません。
と出て、
デバッグを押して再度実行すると、
実行時エラー92 for ループが初期化されていません
にかわります。

デバッグウインドウには
フォーム2を削除します
フォーム2を削除しました
が出力されます。

DoCmd.DeleteObject acForm, obj.Nameをなしにして、コードを実行すると、
フォーム2を削除します
フォーム2を削除しました
フォーム1を削除します
フォーム1を削除しました
が出力されます。

フォームを削除することによって順番が狂いエラーが発生するようですが、
そうであれば、どうすればすべてのフォームを削除することができるのでしょうか?

A 回答 (3件)

最初にCurrentProject.Allformsを変数にいれておいてからその変数を使ってFor Eachでけしていけばいいので

は?
    • good
    • 0
この回答へのお礼

早速のご回答有難うございます。

>最初にCurrentProject.Allformsを変数にいれておいて

とは、

Dim i As Integer
i = CurrentProject.AllForms

For Each obj In i

こうするということでしょうか?

なぜかこれだと、.AllFormsの部分で、引数を省略できませんというエラーになってしまいます。

最初にCurrentProject.Allformsを変数にいれるというやり方を教えていただけますか?
よろしくお願いします。

お礼日時:2013/05/18 13:38

探せばいろいろと転がっていますが、



Dim i As Integer

For i = CurrentProject.AllForms.Count - 1 To 0 Step -1
DoCmd.DeleteObject acForm, CurrentProject.AllForms(i).Name
Next i

では?

メッセージを残すのは御随意に。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/29 19:32

Dim delForm as Object


とかして
delForms = CurrentProject.AllForms
にすれば行けると思いますけど。右辺の名前は何でも良いんですが。
明らかに左側はIntegerではないですよね?
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/29 19:32

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