Событие Worksheet_change и конфликт соединения фильтра слайсера - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть проблема, которая ломает мне голову уже пару дней, поэтому я решил поделиться ею с вами, может быть, вы уже наткнулись на ту же проблему.

=== это контекст : ===

Я работаю над этим файлом Excel, где у меня есть, среди прочего, эти три вкладки: - одна, называемая «Данные», где я храню данные, необходимые для файла, в обычном Таблица; - вторая, называемая «Chart_1», где можно найти pivot_table_1 и chart_1. Источник этих объектов находится на вкладке «Данные». - третья вкладка называется «Диаграмма_2» и содержит сводную таблицу_2 и диаграмму_2. Эти объекты также получены из вкладки «Данные». У меня есть пять слайсеров во вкладке "Chart_1" и еще пять во вкладке "Chart_2". Все слайсеры подключены к обеим сводным таблицам, которые находятся на вкладках «Диаграмма *». Я использовал VBA для форматов диаграмм во вкладках, как события Worksheet_Change.

=== В этом проблема: ===

Когда я выбираю что-то в слайсере (в зависимости от того, что " Chart * (вкладка), она всегда активирует Chart_2. Если я щелкну один из слайсеров на вкладке «Диаграмма_1», то при запуске макроса fini sh активируется вкладка «Диаграмма_2». Когда я нажимаю на один из слайсеров на вкладке "Chart_2", все в порядке, потому что активированная вкладка не меняется. Какой бы слайсер я ни использовал (в какую бы вкладку он не был встроен), VBA всегда запускает сначала «Chart_1» Worksheet_Change, а затем «Chart_2» Worksheet_Change. Я думаю, что это происходит из-за соединений фильтра: когда я нажимаю на один слайсер, он вызывает все затронутые события Worksheet_Change.

=== это то, что я уже пробовал: ===

  • есть глобальная переменная, в которой я храню название соответствующей вкладки работы. Не сработало, потому что оба макроса с обеих вкладок выполнены. Я попытался сделать то же самое со счетчиком, но также потерпел неудачу.
  • ищите событие OnClick, где я мог бы сохранить имя вкладки, на которой щелкнул последний раз перед запуском макроса "Chart *". Не нашел ни одного события OnClick, бух.
  • Я думал о наличии глобальной переменной для хранения имени листа слайсера, который я щелкнул / выбрал в последний раз, но я не знаю, как его получить. Это. Как вы думаете, это может сработать? Как я могу это реализовать?

Итак, это моя проблема с логикой / программированием, прямо сейчас. Есть ли у вас какие-либо предложения о том, как я могу это исправить? Я просто хочу остаться во вкладке, где я был, когда я нажал на слайсер ...

1 Ответ

1 голос
/ 11 февраля 2020

Как обсуждено в комментариях:

Диаграмма 1-Лист:

Public GoodNameForAVariable As String

Private Sub Worksheet_Change(ByVal Target As Range)

GoodNameForAVariable = ActiveSheet.Name

'Your code happens here

End Sub

Диаграмма2-Лист:

Private Sub Worksheet_Change(ByVal Target As Range)

'Your code happens here

ThisWorkbook.Sheets(GoodNameForAVariable).Activate

End Sub
...