0 / 0 / 0 Регистрация: 23.07.2015 Сообщений: 11 |
|
1 |
|
Свернуть/развернуть сгруппированные столбцы08.09.2015, 17:12. Показов 17155. Ответов 5
Здравствуйте! Подскажите, пожалуйста, как макросом свернуть и развернуть сгруппированные столбцы(как бы нажать +-)?
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
08.09.2015, 17:12 |
5 |
The_Prist 1337 / 308 / 74 Регистрация: 13.11.2008 Сообщений: 635 |
||||||||
08.09.2015, 18:27 |
2 |
|||||||
Так же можно отдельно строки и столбцы:
ShowLevels номер группы строк, номер группы столбцов
1 |
0 / 0 / 0 Регистрация: 23.07.2015 Сообщений: 11 |
|
08.09.2015, 20:06 [ТС] |
3 |
А если нужно конкретные столбцы только открыть? Выполнить действия с ними и закрыть. Добавлено через 1 минуту
0 |
1337 / 308 / 74 Регистрация: 13.11.2008 Сообщений: 635 |
|
08.09.2015, 21:00 |
4 |
Выполнить действия с ними и закрыть А вот для «выполнить действия» совершенно не обязательно раскрывать. Предположу, что обращаетесь к Selection. Но в VBA можно вполне без него обращаться к ячейкам. Какие действия производите?
0 |
1 / 1 / 0 Регистрация: 03.12.2014 Сообщений: 329 |
|
25.05.2018, 01:29 |
5 |
The_Prist, не завершите, пожалуйста, тему…. нужно чтобы раскрывалась одна группировка когда ячейка находится в ней
0 |
0 / 0 / 0 Регистрация: 18.04.2018 Сообщений: 1 |
|
04.02.2021, 21:07 |
6 |
Здравствуйте! Кто подскажет, как решать задачу? Спасибо!
0 |
Содержание
- Метод Outline.ShowLevels (Excel)
- Синтаксис
- Параметры
- Возвращаемое значение
- Примечания
- Пример
- Поддержка и обратная связь
- Программно группировать и разгруппировать строки или столбцы
- 3 ответа
- Vba excel свернуть группировку
- VBA Group Rows & Columns
- Group Rows or Columns
- Ungroup Rows or Columns
- Expand All “Grouped” Outline Levels
- VBA Coding Made Easy
- VBA Code Examples Add-in
- VBA Code Generator
- AutoMacro: VBA Add-in with Hundreds of Ready-To-Use VBA Code Examples & much more!
- What is AutoMacro?
Метод Outline.ShowLevels (Excel)
Отображает указанное количество уровней строк и (или) столбцов структуры.
Синтаксис
expression. ShowLevels (RowLevels, ColumnLevels)
Выражение Переменная, представляющая объект Outline .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
RowLevels | Необязательный | Variant | Указывает количество уровней строк структуры для отображения. Если в структуре меньше уровней, чем указано число, Microsoft Excel отображает все уровни. Если этот аргумент равен 0 (ноль) или опущен, никаких действий для строк не выполняется. |
ColumnLevels | Необязательный | Variant | Указывает количество уровней столбцов структуры для отображения. Если в структуре меньше уровней, чем указано число, Excel отображает все уровни. Если этот аргумент равен 0 (нуль) или опущен, никаких действий по столбцам не выполняется. |
Возвращаемое значение
Примечания
Необходимо указать по крайней мере один аргумент.
Пример
В этом примере отображаются уровни строк от одного до третьего, а уровень столбца — один из контура на листе Sheet1.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Программно группировать и разгруппировать строки или столбцы
Есть ли способ программно группировать / разгруппировать столбцы или строки в Excel 2010?
- команда «вручную» находится в Data> Outline> Group / Ungroup
- в Excel 2003 это работало: someSheet.columns(i).ShowDetail = True / False , но больше не работает в 2010 для групп (только для сводных таблиц и групп промежуточных итогов)
- запись макроса не дает никакого кода, который я мог бы использовать
Точнее, вызов myRange.ShowDetail = True в Excel 2010 действительно расширяет свернутую группу, но вызывает ошибку, если группа уже развернута. А свойство ShowDetail возвращает True независимо от того, развернута группа или нет.
3 ответа
В Excel 2010 свойство ShowDetail всегда возвращает значение true для группы, независимо от того, свернута она или развернута. Вместо этого можно использовать свойство Hidden :
Что касается строк не в сводных таблицах . По моему опыту в Excel 2010 ShowDetail ВСЕГДА оценивается как True. Я думал, что это так, но не понимал, что мне нужно быть в итоговой строке, чтобы это свойство работало должным образом. Во-вторых, я не осознавал, что итоговая строка по умолчанию находится ПОД сгруппированными строками. Тестирование на свертывание / развертывание стало намного понятнее, когда я изменил этот параметр, чтобы строка сводки отображалась над сгруппированными строками (на ленте: Данные> Структура, Показать поле Outline Dlg).
Если выбранная мной ячейка находится в итоговой строке, ShowDetail получает значение True, если сгруппированные записи отображаются, и False, если это не так. Ключевым моментом для меня было нахождение в итоговой строке, чтобы увидеть, как это поведение работает таким образом. Наличие дочерних / сгруппированных строк выше по умолчанию действительно бросило меня.
Вот мой макрос, который динамически разворачивает и сворачивает сгруппированные записи, привязанные к итоговой строке, когда я выбираю ячейку в итоговой строке. И это делает мою ячейку в столбце A жирным шрифтом, если раздел расширен. Этот макрос не запускается, если я выбрал более одной ячейки.
Обратите внимание, что защита рабочего листа предотвращает разворачивание и сворачивание групп ячеек. Мой рабочий лист защищен, поэтому я снимаю защиту листов, чтобы развернуть / свернуть, а затем повторно защищаю их. (Возможным улучшением для меня было бы просто снять / защитить только текущий лист, а не все.)
Помните, я установил свою итоговую строку над сгруппированными записями. Если ваша итоговая строка находится ниже сгруппированных записей (по умолчанию), тогда ссылку на строку смещения необходимо изменить на -1, например:
Источник
Vba excel свернуть группировку
Доброго времени суток!
Делаю сводную с огромной структурой отчета и разворачивать мышкой на каждом уровне каждого заголовка очень неудобно.
В отчете уровней более 10-ти и значения уровней не такие юзер френдли, как в примере, поэтому переключаться на нужный уровень, это как сальто с тройным пируэтом в воздухе после каждой фильтрации в отчете.
Очень нужен макрос на кнопку развернуть/свернуть по уровням структуры. Вижу три варианта решения.
1) Выбор уровня из раскрывающего списка
2) Две кнопки (одна раскрывает на 1 уровень, другая сворачивает на 1 уровень)
3) Через счетчик аналогично 2-ому варианту. Не представляю правда как, но это было бы супер мощным решением.
Ниже загрузил файл-пример, там собственно пример таблицы и там же реализован 1 вариант, который работает очень криво.
Также в файле добавил кнопки для других вариантов, чтобы было нагляднее.
Если у вас есть возможность, помочь с решением, буду невероятно признателен.
По решению приоритетнее 2 или 3 вариант. Хотя если реализовать их сложно, то правке кода 1-ого варианта, тоже буду очень рад.
Очень надеюсь на Вашу помощь.
Ниже привожу пример структуры отчета и кода на раскрыть/свернуть через выпадающий список, который представлен в файле.
[vba]
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Кнопка2_Щелчок()
For i = 1 To Number
CurrNextLevel = ActiveSheet.PivotTables(«СводнаяТаблица1»).PivotFields(CurrLevel).PivotItems(i)
ActiveSheet.PivotTables(«СводнаяТаблица1»).PivotFields(CurrLevel).PivotItems(CurrNextLevel).ShowDetail = True
Доброго времени суток!
Делаю сводную с огромной структурой отчета и разворачивать мышкой на каждом уровне каждого заголовка очень неудобно.
В отчете уровней более 10-ти и значения уровней не такие юзер френдли, как в примере, поэтому переключаться на нужный уровень, это как сальто с тройным пируэтом в воздухе после каждой фильтрации в отчете.
Очень нужен макрос на кнопку развернуть/свернуть по уровням структуры. Вижу три варианта решения.
1) Выбор уровня из раскрывающего списка
2) Две кнопки (одна раскрывает на 1 уровень, другая сворачивает на 1 уровень)
3) Через счетчик аналогично 2-ому варианту. Не представляю правда как, но это было бы супер мощным решением.
Ниже загрузил файл-пример, там собственно пример таблицы и там же реализован 1 вариант, который работает очень криво.
Также в файле добавил кнопки для других вариантов, чтобы было нагляднее.
Если у вас есть возможность, помочь с решением, буду невероятно признателен.
По решению приоритетнее 2 или 3 вариант. Хотя если реализовать их сложно, то правке кода 1-ого варианта, тоже буду очень рад.
Очень надеюсь на Вашу помощь.
Ниже привожу пример структуры отчета и кода на раскрыть/свернуть через выпадающий список, который представлен в файле.
[vba]
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Кнопка2_Щелчок()
For i = 1 To Number
CurrNextLevel = ActiveSheet.PivotTables(«СводнаяТаблица1»).PivotFields(CurrLevel).PivotItems(i)
ActiveSheet.PivotTables(«СводнаяТаблица1»).PivotFields(CurrLevel).PivotItems(CurrNextLevel).ShowDetail = True
Dmitry_spb
Сообщение Доброго времени суток!
Делаю сводную с огромной структурой отчета и разворачивать мышкой на каждом уровне каждого заголовка очень неудобно.
В отчете уровней более 10-ти и значения уровней не такие юзер френдли, как в примере, поэтому переключаться на нужный уровень, это как сальто с тройным пируэтом в воздухе после каждой фильтрации в отчете.
Очень нужен макрос на кнопку развернуть/свернуть по уровням структуры. Вижу три варианта решения.
1) Выбор уровня из раскрывающего списка
2) Две кнопки (одна раскрывает на 1 уровень, другая сворачивает на 1 уровень)
3) Через счетчик аналогично 2-ому варианту. Не представляю правда как, но это было бы супер мощным решением.
Ниже загрузил файл-пример, там собственно пример таблицы и там же реализован 1 вариант, который работает очень криво.
Также в файле добавил кнопки для других вариантов, чтобы было нагляднее.
Если у вас есть возможность, помочь с решением, буду невероятно признателен.
По решению приоритетнее 2 или 3 вариант. Хотя если реализовать их сложно, то правке кода 1-ого варианта, тоже буду очень рад.
Очень надеюсь на Вашу помощь.
Ниже привожу пример структуры отчета и кода на раскрыть/свернуть через выпадающий список, который представлен в файле.
[vba]
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Кнопка2_Щелчок()
For i = 1 To Number
CurrNextLevel = ActiveSheet.PivotTables(«СводнаяТаблица1»).PivotFields(CurrLevel).PivotItems(i)
ActiveSheet.PivotTables(«СводнаяТаблица1»).PivotFields(CurrLevel).PivotItems(CurrNextLevel).ShowDetail = True
Автор — Dmitry_spb
Дата добавления — 06.08.2015 в 06:55
miver | Дата: Четверг, 06.08.2015, 11:33 | Сообщение № 2 | |||||
|
Regarding rows not in pivot tables … It has NOT been my experience in Excel 2010 that ShowDetail ALWAYS evaluates to True. I thought it did but I didn’t realize that I needed to be on the summary row for this property to work as expected. Second of all, I didn’t realize the summary row by default is UNDER the grouped rows. Testing for collapsed/expanded became much clearer once I changed that setting to have the summary row above the grouped rows (in the Ribbon: Data > Outline, Show the Outline Dlg Box).
If my selected cell is on the summary row, the ShowDetail evalutes to True if the grouped records are showing, and to False if they are not. The key for me was being on the summary row to see that behavior work this way. Having the child/grouped rows above by default really threw me.
Here’s my macro, which dynamically expands and collapses the grouped records tied to the summary row when I select a cell on a summary row. And, it makes my cell in column A bold if the section is expanded. This macro does not run if I’ve selected more than one cell.
Note that worksheet protection prevents expanding and collapsing groups of cells. My worksheet is protected, so I unprotect the sheets to expand/collapse then reprotect them after. (A possible improvement would be for me to just unprotect/protect just the current sheet instead of all of them.)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'TOGGLE SHOW/HIDE ROW
If Target.Cells.Count = 1 Then
If (Target.EntireRow.OutlineLevel = 1) And (Target.Offset(1, 0).EntireRow.OutlineLevel = 2) And _
(Target.Column < 15) Then
Call Macros.ProtShts(False)
Target.EntireRow.ShowDetail = Not Target.EntireRow.ShowDetail
If Target.EntireRow.ShowDetail = True Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 14)).Font.Bold = True
Else
Range(Cells(Target.Row, 1), Cells(Target.Row, 14)).Font.Bold = False
End If
Call Macros.ProtShts(True)
End If
End If
End Sub
Remember, I set my summary row to be above the grouped records. If your summary row is below the grouped records (the default) then the offset row reference must be changed to -1, like this:
(Target.Offset(1, 0).EntireRow.OutlineLevel = 2)
Здравствуйте, нужно написать такой макрос, что б при нажатии на кнопку открывалась и закрывалась группировка…файл приложил, заранее спасибо ))) |
|
Serge Пользователь Сообщений: 11308 |
А в 2007 макрорекордер это не пишет |
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
А что, кнопка с макросом будет удобнее, чем всё равно уже имеющийся (и никуда вы от него не денетесь) слева значок сворачивания/разворачивания группировки? С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
мне-то конечно легче…но задача поставлена, выполнять надо…как сделать — не знаю, вот и прошу совета… ЗЫ вся работа ведется в 2003-ем |
|
слэн Пользователь Сообщений: 5192 |
|
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
слэн, Private Sub CommandButton1_Click() в одной строке из одной КОМАНДЫ ВЫЧИТАЕТЕ ДРУГУЮ КОМАНДУ!!! С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
слэн Пользователь Сообщений: 5192 |
тут почитал, там почитал спасибо родителям, которые научили меня читать |
слэн Пользователь Сообщений: 5192 |
ps там не вычитаются команды, это глыбже.. при таком вызове метода после имени метода все считается параметром т.о. параметр 1 -rows(2).hidden вычислится, попутно преобразовав логическое значение в числовое(которое, кстати говоря, здесь понимается не так, как в икселе — здесь истина преобразуется в минус единицу) |
Слэн, спасибо огромное ))) |
|
слэн Пользователь Сообщений: 5192 |
нет, в этом написании получаются две команды: showlevel 0 — закрыть и showlevel 2 в данном случае уровней всего два — первый и второй ноль преобразуется самим методом в единицу вот такая цепочка неявных преобразований.. к сожалению как узнать текущий уровень я не знаю.. |
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
Спасибо за разъяснение. КРУТО! С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
Igor67 Пользователь Сообщений: 3726 |
А разве не проходит? |
I am Гость |
#13 10.12.2010 10:31:13 А не подскажите как по аналогии сделать так чтоб выводилась вся строчка 4 категории? Прикрепленные файлы
|
I’m hoping someone may be able to help get me here…
I have a huge list and am using grouping to organize it:
As you can see I have a Major Group row that has a number of products grouped into it. Then, some products have accessories that are then grouped under that part.
What I want, is to collapse ALL the accessories groups of ONLY the products showing. The below code will expand groups that are not expanded, I don’t want that.
shtOTP.Outline.ShowLevels RowLevels:=4
shtOTP.Outline.ShowLevels RowLevels:=3
shtOTP.Outline.ShowLevels RowLevels:=2
ActiveWindow.ScrollRow = shtOTP.Range("A3").row 'Go to top of sheet
I’ve tried looking into the .Outline.Parent
.Outline.SummaryRow
functions but as far as I can tell they don’t identify a «parent» of the group.
I can do a loop like the following:
For i = 3 To getLastRow
Dim nextRow As Integer
nextRow = shtOTP.Rows(i+1).row
If nextRow = ParentRow And i.EntireRow.Hidden = False Then
'Collapse the group below the product
End If
Next
But…
HOW do I identify if the nextRow is a parentRow?
HOW do I collapse JUST THAT GROUP?