#545 並べ替えクリア後にレコードソースがリセットされないときの対処法 フォーム、VBA

下記のような条件のフォームにおいて、VBAでサブフォームに対する並べ替え処理をいろいろ行ったあと、並べ替えをクリアしても、そのあとサブフォームのフィルタ(正確にはレコードソースのクエリのWHERE条件)がうまく働かないという現象が起こることがあります。
  • メイン/サブフォーム形式のフォーム
  • メイン側には抽出条件となるテキストボックスと、並べ替え条件を指定するコンボボックスが配置されている
  • サブ側のレコードソースはクエリであり、そのWHERE条件としてメインフォームの上記テキストボックスを参照している
  • 並べ替えプログラムとして以下のような処理を実行

    With サブフォームコントロール名
      .OrderBy = コンボボックスの条件値
      .OrderByOn = True
    End With


  • また、並べ替えをクリアするために以下のようなプログラムを実行

    With サブフォームコントロール名
      .OrderBy = ""
      .OrderByOn = False
      .Requery
    End With


このプログラムによって並べ替えは確かにクリアされます。しかし、メインフォームの抽出条件となるテキストボックスには何らかの値が代入されているので、本来であればその値が参照されそれに一致するレコードだけが抽出されるべきところなのですが、サブフォームを再クエリしても全レコードが表示されてしまうという現象です。サブフォームにカーソルを置きShift+F9でも更新されませんし、一方で直接クエリを開いてみると正しく抽出されています。


このようなときは、次のように、サブフォームのレコードソースのプロパティを丸ごと入れ替えてしまいましょう。入れ替えるとはいってもまったく別のクエリを指定するのではなく、デザイン時に設定されている既定のクエリを改めて指定し直すということです。

With サブフォームコントロール名
  .OrderBy = ""
  .OrderByOn = False
  .RecordSource = "ここに既定のクエリ名"
  .Requery
End With

| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved