#626 | サブフォーム内の全フィールドを検索するには? | フォーム、VBA | |
1つのキーワードを指定して、サブフォームに表示されているすべてレコードおよびすべてのフィールドについて、その文字が含まれているかどうかを調べるプログラムの例です。 まずここでは、次のようなデザインのフォームを作ります。
上記のテキストボックス「検索キーワード」への入力値が更新されるとイベントが発生しますので、その「BeforeUpdate/更新後処理」イベントプロシージャで検索処理を実行します。 そのプログラムは次のようなものです。 Private Sub 検索キーワード_AfterUpdate() '検索キーワードテキストボックスの更新後処理 Dim rst As Recordset Dim sfrm As SubForm Dim iintLoop As Integer 'キーワードが空なら検索しない If IsNull(Me!検索キーワード) Then Beep Exit Sub End If 'サブフォームのオブジェクトを変数にセット Set sfrm = Me!frm商品マスタ_sub 'サブフォームのレコードセットクローンを取得 Set rst = sfrm.Form.RecordsetClone With rst 'いったん先頭レコードに戻す .MoveFirst '全レコードの探索ループ Do Until .EOF 'カレントレコードの全フィールドの探索ループ For iintLoop = 0 To .Fields.Count - 1 'フィールド値をすべて文字列として照合 If InStr(CStr(Nz(.Fields(iintLoop))), Trim$(Me!検索キーワード)) > 0 Then '見つかったとき 'フォームのカレントレコードをクロンのカレントレコードに移動 sfrm.Form.Recordset.AbsolutePosition = rst.AbsolutePosition 'そのフィールドにフォーカス移動 sfrm(.Fields(iintLoop).Name).SetFocus .Close 'プロシージャを抜ける Exit Sub End If Next iintLoop .MoveNext Loop .Close '見つからなかったとき Beep MsgBox "指定したキーワードは見つかりませんでした!", vbOKOnly + vbInformation End With End Sub
実行例: ※サブフォームのレコードの検索では「RecordsetClone」ではなく「Recordset」も使えますが、その場合にはカーソルが移動していく様子が見えてしまうので、ここではRecordsetClone上を検索して見つかったらRecordsetもそのレコードに移動するという方法をとっています。 |
|||
|
Copyright © T'sWare All rights reserved |