Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Office Новый топик    Ответить
 EXCEL Worksheet_Change  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 685
Hello world!
Есть лист со сводной таблицей, источником которой является OLAP-куб.
Для этого листа настроил реакцию на событие Change
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
    Dim WSH As Worksheet
    Set WSH = ThisWorkbook.Worksheets("Фил-СП (2)")
    Dim PVT_cnt As Integer
    PVT_cnt = WSH.PivotTables.Count
    ' Сводная таблица источник
    Dim PT_CP As PivotTable
    Set PT_CP = WSH.PivotTables("Без СП")
        A = Target.Column
        B = Target.Row
Application.ScreenUpdating = True
End Sub

Переменные A и B содержат номер столбца и строки измененной ячейки.

Если изменения вносятся в области очерченные красным, то A = B = 1. Например для формирования скрина менял ячейку B1, путем выбора из возможных.
Также не работает отключение анимации.

Как побороть это?
19 сен 17, 18:23    [20806985]     Ответить | Цитировать Сообщить модератору
 Re: EXCEL Worksheet_Change  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 685


К сообщению приложен файл. Размер - 83Kb
19 сен 17, 18:25    [20806990]     Ответить | Цитировать Сообщить модератору
 Re: EXCEL Worksheet_Change  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 685
Yagrus2,
Изменив немного код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
    Dim WSH As Worksheet
    Set WSH = ThisWorkbook.Worksheets("Ôèë-ÑÏ (2)")
    ' Ñâîäíàÿ òàáëèöà èñòî÷íèê
    Dim PT_CP As PivotTable
    Set PT_CP = WSH.PivotTables("Áåç ÑÏ")
        A = Target.Column
        B = Target.Row
    Target.Activate
Application.ScreenUpdating = True
End Sub
провел ряд экспериментов в ходе которых выяснилось:
1. Если изменение - это манипуляция со сводной таблицей, то измененная ячейка определяется неверно.
1а. Меняем значение поля "Группы планирования" с ПОС на СЕР. Результат A=B=1 и активной становится вся область сводной таблицы

1б. Становимся на ячейку B8 и перетаскиваем "Филиал" из строк в фильтры.
Результат A=B=1 и активной становится вся область сводной таблицы

1в. Становимся на строку 6 и перетаскиваем "Дата. Календарная" из строк в фильтры. Результат A=B=1 и активной становится вся область сводной таблицы

1.г Ставлю галку отложить обновление макета, перетаскиваю поле "Филиал" в строки, "Дата. Календарная"
в столбцы и жму кнопку Обновить Результат A=1 B=3. Активной остается прежняя область сводной таблицы

2. Аналогичная ситуация получается, если источником для сводной таблицы является SQL-таблица.

Буду рад услышать ваши соображения по этому поводу!

К сообщению приложен файл. Размер - 141Kb
20 сен 17, 10:49    [20808183]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Office Ответить