Страницы: 1
RSS
Сводные. Классические. Как при копировании данных из сводной повторить её группировку, Обзор нескольких способов.
 
Доброго времени суток, Планетяне!

Такой вопрос: забираю всю сводную в массив и создаю подмассивы с номерами строк для каждого из уровней группировки (для того, чтобы потом быстро производить сложные вычисления и промежуточные итоги). Всё работает, кроме самой группировки. Стандартным методом, через отступы, всё корректно, а через массивы (как мне кажется, тот же самый порядок) - не получается.

Что я делаю не так и как в таком случае нужно было?
КОД
Изменено: Jack Famous - 14.08.2018 12:33:31
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Я что-то не пойму смысла происходящего. Но выбранный вами способ группировки мне кажется избыточным.
Можно так: сначала
Код
arr = [_PTdetBody].Value2
n = UBound(arr, 1)

ReDim arrO(1 To n)
For i = 1 To n
    arrO(i) = [_PTdetBody].Cells(i, 1).IndentLevel
Next i
i = 0

затем
Код
Private Sub file_Group2(ByRef arr(), ByRef arrO())
Dim x
    For Each x In arr
        Rows(x).OutlineLevel = arrO(x) + 1
    Next x
End Sub

и вызываете так:
Код
Call file_Group2(arrD, arrO) ' детали
Call file_Group2(arrT, arrO) ' типы
Call file_Group2(arrR, arrO) ' расценки
Call file_Group2(arrG, arrO) ' группы
Call file_Group2(arrC, arrO) ' категории
Изменено: Максим Зеленский - 14.08.2018 11:52:10
F1 творит чудеса
 
Максим Зеленский, приветствую!
Цитата
не пойму смысла происходящего
всё просто - как группировать, если отступов в сводной нет, но номера строк каждой группы известны?  Обязательно ли эти отступы проставлять (руками или программно), чтобы группировку сделать? :)
Цитата
выбранный вами способ группировки мне кажется избыточным
это точно - ваш гораздо короче и шустрее — спасибо за вариант задания группировки через OutlineLevel  ;)
Изменено: Jack Famous - 14.08.2018 12:06:18
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
как группировать, если отступов в сводной нет?
ну в примере вы как раз группируете по отступам в исходной сводной. Если вы хотите группировать по жестко заданной структуре данных, то тогда либо одновременно с номерами строк запоминайте будущий OutlineLevel, или еще проще - передавайте его не как массив, а как фиксированный integer при вызове обработчика (вы же знаете, какой именно уровень вам нужен):

Код
Call file_Group2(arrD, 6) ' детали
Call file_Group2(arrT, 5) ' типы
Call file_Group2(arrR, 4) ' расценки
Call file_Group2(arrG, 3) ' группы
Call file_Group2(arrC, 2) ' категории
...
'=====
Private Sub file_Group2(ByRef arr(), ol&)
Dim x
    For Each x In arr
        Rows(x).OutlineLevel = ol
    Next x
End Sub
F1 творит чудеса
 
Максим Зеленский, я так и подумал, что из вашего примера теперь достаточно просто убрать отступы, чтобы всё заработало)))
спасибо большое!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх