0

その上に一連のフィルターがあるテーブルがあります (通常どおり)。このテーブルは、複数の一連のデータを含む大規模なグラフをフィードします。さまざまな一連のデータを非表示にするために、テーブル内の情報をグループ化しました。次に、マイナス ボタンをクリックしてグループを折りたたんでグラフから一連のデータを削除するか、プラス ボタンをクリックして同じ方法でデータを追加し直します。はい、最善の解決策ではありません。それは初期の取り組みでした。何と言えますか?私のデフォルトでは、すべてのデータが非表示になっています (すべてのグループが折りたたまれています)。

探している特定のシリーズを見つけるために上部のフィルターを使用できるようにしたいユーザー (非常に重要なユーザー) がいます。フィルターは折りたたまれたシリーズを問題なく検出しますが、シリーズは折りたたまれているため表示されません。

だから、私がやろうとしているのは、フィルターがアクティブになったときにすべてのグループを自動展開することです。これは、グラフを簡単に再設計できるようになるまでの応急措置として機能するはずです。

問題: フィルターがクリックされた (または別の方法で使用された) ときに Excel に通知する方法がわかりません。Worksheet_Change と Worksheet_SelectionChange を使用してみましたが、どちらもリスナーで設定したコードをアクティブにしません。そのコード、参考までに、フィルターが使用されていることを確認し、それに応じてグループ化を調整します。Excelにその存在を認識させることができれば、うまくいくはずです。

独自のリスナーを作成することを検討しましたが、コードに挿入してアクティブにすることができる場所がありません。フィルターが変更されたときに通知するリスナーが必要なだけです。

何かご意見は?1時間の検索の後、私は困惑しています...

4

2 に答える 2

3

さて、いくつかの調査の後、回避策を見つけました。ここでの大きな問題は、フィルターを変更しても、VBA が認識できるイベントが発生しないことです。大問題。

簡単な解決策: リスナーをアクティブにするものを作成します。

私がやったのは、折りたたみの影響を受けないテーブルの外側のどこかにセルを見つけて、非常に単純な式 (=Count(H:H)) を追加することでした。これで、テーブルが折りたたまれるたびにカウントが影響を受け、Worksheet_Calculate リスナーがアクティブになります。そして出来上がり!グループ化を動的に変更することができます:-)。

それで、あなたはそれを持っています。ワークシート リスナーを介してアクティブ化されているフィルターを検出する必要がある場合は、計算リスナーをアクティブ化するための式を設定するだけです。

参照: [同じことに関する MSDN の記事]。1 この問題を解決するためのより確実な方法が明らかにあり、記事で詳しく説明されています。

于 2012-12-20T16:26:40.257 に答える
1
  • テーブルについて言及したので、それがピボットテーブルであると仮定して、試してみてください。

Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

  • それが単にターゲット範囲の変更である場合、

If Intersect(Target, Range("A2"))

于 2012-12-20T16:06:01.663 に答える