• ベストアンサー

フォームを削除するVBA

こんにちは。 NT4.0ででAccess97を使用しています。 あるAccessデータベースにあるフォームだけをすべて削除したいのですが、 一つ一つ削除するのは、面倒なので、VBAで一括削除したいのです。 For Each Next文を使うのだろうと思い、いろいろ試してみましたが、 私がオブジェクトをあまり理解していないせいで、コードの書き方がいまいちわかりませんでした。 よろしくお願い申し上げます。

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

  • ベストアンサー
  • teppy
  • ベストアンサー率50% (9/18)
回答No.1

こんな感じでどうでしょう? まず、フォームを作成し、コマンドボタンを1個配置します コマンドボタンのイベントプロシージャに下記コードを記して下さい ※参照設定で、「MS DAO3.5」を設定して下さい '~~~~~~~~~~~~~~~~~~~~ Private Sub コマンド0_Click() Dim DB As DAO.Database Dim DOC As DAO.Document Dim stMsg As String '削除確認 stMsg = "すべてのフォームを削除しますか?" If MsgBox(stMsg, vbQuestion + vbYesNo) = vbNo Then Exit Sub 'カレントデータベース設定 Set DB = CurrentDb '登録されているフォームの数だけループ For Each DOC In DB.Containers!Forms.Documents '(自分以外の) If DOC.Name <> Me.Name Then 'フォームオブジェクトの削除 DoCmd.DeleteObject acForm, DOC.Name End If Next 'データベース変数解放 Set DB = Nothing End Sub '~~~~~~~~~~~~~~~~~~~~ コマンドボタンを押下すると削除確認が表示され、「はい」を選択するとすべてのフォームは削除されます ただし、自分自身のフォームは残ってしまいますが...(^_^;) 御期待に添えれば・・・

kyoukorumi
質問者

お礼

どうもありがとうございます。 大変助かりました! とてもわかりやすかったです。 ほんとに、どうもありがとうございます。

関連するQ&A

  • Acccessのフォーム/VBAについて

    アクセス(Acccess)のフォーム/VBAを使ってデータベースを 作りたいのですが、参考になる本などを教えてください。

  • MSアクセス VBA クラスオブジェクト内のファイルを削除できない

    MSアクセス VBA クラスオブジェクト内のファイルを削除できない 誤ってフォームを削除してしまいました。 そのフォームに関連したVBのファイル(クラスオブジェクト内)は残ったままです。 それを削除しようとしてもできません。どうしたら削除できますか?

  • Access2016ではVBAは使えないのでしょう

    お世話になります。 Access2010を使っています。 今回Office365proに切り替えるべく、インストールしました。 Access2016使用可能になり、これでAccess2010で作成したファイルを開こうとすると以下の警告が出て、かまわず続けると 警告通り、VBAが全て削除されています。 その上、[OK]クリックで警告通り全てのVBAは削除され、[キャンセル]は複数回必要です。 ------------------------------------------------------------------------------------------------------------------- データベースに含まれているVBAプロジェクトを読み取れないため、データベースを開くことができません。 データベースを開くには、VBAプロジェクトを削除する必要がありまます。 VBAプロジェクトを削除するとモジュール、フォーム、およびレポートからすべてのコードが削除されます。 データベースを開いてVBAプロジェクトを削除する前に、バックアップコピーを作成することをお勧めします。 データベースのバックアップを作成する場合は[キャンセル]をクリックしてください。 バックアップコピーをデータベースを開き、VBAプロジェクトを削除する場合は、[OK]をクリックしてください。 --------------------------------------------------------------------------------------------------------------- 互換性を保つ方法はありますか。 追伸 下記のコードもAccess2016で記述及び保存はできるのですが、ファイルを開くことができません Private Sub 終了_Click() Quit End Sub

  • 全てのフォームを削除したい アクセス2010

    フォーム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を削除しました が出力されます。 フォームを削除することによって順番が狂いエラーが発生するようですが、 そうであれば、どうすればすべてのフォームを削除することができるのでしょうか?

  • シート上のjpg画像のみを一括削除したい

    Excel VBA勉強中の者です。 早速ですが、シート上にあるjpg画像のみを一括削除したく ネットで調べつつ以下のコードを作ってみました Sub dlt() '既存の画像を削除 Dim jpgdlt As Shape With ActiveSheet .DrawingObjects.Delete 'このコードが違っている??? For Each jpgdlt In .Shapes ’For Each Next で選択対象を繰り返し削除 jpgdlt.Delete Next End With End Sub これでjpg画像の削除は出来たのですが、シート上に配置した コントロールなどのオブジェクトも全て削除されてしまい困っております。 以下のコードも作ってみたのですが、こちらはメモリーが不足しているという エラーを回避できず、オブジェクトが削除されるか検証する前に使用を断念しました。 Sub dlt() '既存の画像を削除 Dim jpgdlt As Object Set jpgdlt = ActiveSheet jpgdlt.Shapes.SelectAll Selection.Delete End Sub jpg画像のみを選択し、削除するにはどうすれば宜しいのでしょうか? 色々調べてはみたものの、自力での解決に至らず、 お手数お掛けしますがどなたかご助力お願い致します。

  • Access VBA コントロール 削除

    Access の VBA にて、フォームに設置しているラベルやテキストボックスといったコントロールを削除するコードを作成したいのですが、どのように記述すればよろしいでしょうか?

  • フォーム上の全てのコントロールを取得したい

    フォーム上の全てのコントロールを取得したいです。 (サブフォームも含め) 自分なりにVBAで考えてみたのがこれです。 Sub test() Dim 数 As Long For Each 数 In Form_フォーム1.Controls.Count ’Debug.Print ? End If Next End Sub でもこれだけでもデバックしてみると 「コンハ゜イルエラー for Eachは、コレクション オブジェクトまたは配列でのみ繰り返しを実行します。」 となります。 答えを教えてください! よろしくお願いします。 (アクセス2003です)

  • フォーム上でVBAの編集するには?

    AccessのVBA内を編集したいのですが、VBAを直接開かないで行うことはできますでしょうか? フォーム上から、置き換えのような形にしたいです。 例)フォーム上で、aaa.txt ⇒ bbb.txt と入力すると、VBA内の該当文字が置き換えできる。 そして、○文字変更されました。とメッセージを表示したい。 VBAのコードを教えていただけたらありがたいです。 よろしくお願いいたします。

  • フォーム上のすべてのコマンドボタンの名前を取得

    エクセルvbaでフォームを開く時に、フォーム上のすべてのコマンドボタンの名前を取得したいのですが、 コードがわかりません。 Private Sub UserForm_Initialize() Dim objcmd As Object For Each objcmd In Me.ActiveControl Debug.Print objcmd.Name Next だと、Me.ActiveControlでエラーになります。 適切なコードを教えてください。

  • VBAを使ってフォームをデータベースにリンク

    ワード2010でVBAを使って、「フォームをデータベースにリンクする」の箇所を、MOSエキスパートワード2010(FOM出版)で勉強しています。しかし、さっぱりわかりません。 ワードにエクセルや、アクセスのデータを取り込みたい、連動させたい?くらいまではわかるのですが コードウインドウ内に入れる 英語の表記が何を意味するのかがわかりません。 ちなみにLesson69をやっているのですが・・・・。 ただ、VBAを勉強するとなればかなりの時間がかかるかと思います。 ですから、「データベースにリンク」するときの言語の意味だけでも理解できて 覚えることができればと思います。 丸暗記でも良いのでしょうが、それでは理解できたと言えないでしょうし・・・。 だからと言って、VBAだけを勉強する余裕もありません。 試験で出題されるのは、ここだけです。 アドバイス等いただければと思います。 例として 「Set cn = New ADODB.connection」が何を意味しているのか等等です。 よろしくお願いします。