#634 | 任意の数のサブフォームをまとめて再クエリする方法 | フォーム、VBA | |
ひとつのフォームに複数のサブフォームコントロールが配置されている場合、あるタイミングで同時にすべてのサブフォームを再クエリするには、単純に「サブフォーム名.Requery」という命令を列挙するだけです。 【例】 Me!サブフォーム1.Requery Me!サブフォーム2.Requery Me!サブフォーム3.Requery 〜〜〜〜〜〜〜〜 しかし、同じようなレイアウトのフォームがデータベース内にたくさんある場合、おそらくフォームごとに「サブフォーム名」を変える必要があります。またフォームによってサブフォームの数も異なるかもしれません。 そのようなとき、『あるフォーム内にあるすべてのサブフォームコントロールを(名前によらず)探索してそれぞれについて再クエリを実行する』という共通的なプロシージャを標準モジュールにあらかじめ作っておくことによって、フォームごとにサブフォームコントロール名が違っていても、サブフォームの数が違っていても、同じ命令でかつ1行でプログラムを記述することができます。 それには、まず次のようなプロシージャを標準モジュールに記述します。 Public Sub SubFormRequery(frm As Form) Dim ctl As Control '引数のフォーム内のサブフォームを探索して再クエリ For Each ctl In frm.Controls With ctl If .ControlType = acSubform Then .Requery End If End With Next ctl End Sub そして、それを呼び出す側の特定のフォームには、下記のようなコードを記述します。ここでは「cmdRequery」という名前のコマンドボタンのクリックでそれを実行するようにしています。サブフォームコントロール名は一切記述されていません。 Private Sub cmdRequery_Click() '[再クエリ]ボタンクリック時 '全フォームを再クエリ SubFormRequery Me End Sub 実行例: ■[再クエリ]ボタンクリック前 ■[再クエリ]ボタンクリック後 【注】
フォームやレコードソースの構造あるいは動作環境によっては「.Requery」だけではうまく動作せず、「.Form.Requery」と書いた方がいいケースもあるようです。 |
|||
|
Copyright © T'sWare All rights reserved |