Vba excel свернуть группировку

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

Visual Basic
1
2
3
4
'скрыть все
ActiveSheet.Outline.ShowLevels 1, 1
'раскрыть все
ActiveSheet.Outline.ShowLevels 6, 6

Так же можно отдельно строки и столбцы:

Visual Basic
1
2
ActiveSheet.Outline.ShowLevels 2, 0
ActiveSheet.Outline.ShowLevels 0, 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

Цитата
Сообщение от KuznetsMasha
Посмотреть сообщение

Выполнить действия с ними и закрыть

А вот для «выполнить действия» совершенно не обязательно раскрывать. Предположу, что обращаетесь к 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

Здравствуйте!
А если нужно развернуть только конкретную группу?
При попытке использовать предлагаемый
Rows(xx). ShowDetail = True
Возникает ошибка времени выполнения 1004 Unable to set the ShowDetail property of the Range Class.

Кто подскажет, как решать задачу?

Спасибо!



0



Содержание

  1. Метод Outline.ShowLevels (Excel)
  2. Синтаксис
  3. Параметры
  4. Возвращаемое значение
  5. Примечания
  6. Пример
  7. Поддержка и обратная связь
  8. Программно группировать и разгруппировать строки или столбцы
  9. 3 ответа
  10. Vba excel свернуть группировку
  11. VBA Group Rows & Columns
  12. Group Rows or Columns
  13. Ungroup Rows or Columns
  14. Expand All “Grouped” Outline Levels
  15. VBA Coding Made Easy
  16. VBA Code Examples Add-in
  17. VBA Code Generator
  18. AutoMacro: VBA Add-in with Hundreds of Ready-To-Use VBA Code Examples & much more!
  19. 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
Dmitry_spb Дата: Четверг, 06.08.2015, 12:57 | Сообщение № 3

Miver, исходные данные находятся в модели данных pover pivot, поэтому контекстное меню выглядит иначе.

Как Вы можете заметить в контекстном меню отсутствует уровень структуры при Развернуть/Свернуть, аналогично отсутствующей возможности группировки.
При возможности я бы с самого начала загрузил файл аналогичный оригиналу. Но это невозможно, т.к. при использовании модели данных PoverPivot, независимо от кол-ва строк и столбцов внутри, файл будет превышать допустимый размер в 100кб.
В общем, обходными путями честно не получится. В данном случае нужен именно макрос.

Привожу пример контекстного меню в моем случае.

Miver, исходные данные находятся в модели данных pover pivot, поэтому контекстное меню выглядит иначе.

Как Вы можете заметить в контекстном меню отсутствует уровень структуры при Развернуть/Свернуть, аналогично отсутствующей возможности группировки.
При возможности я бы с самого начала загрузил файл аналогичный оригиналу. Но это невозможно, т.к. при использовании модели данных PoverPivot, независимо от кол-ва строк и столбцов внутри, файл будет превышать допустимый размер в 100кб.
В общем, обходными путями честно не получится. В данном случае нужен именно макрос.

Привожу пример контекстного меню в моем случае.
Dmitry_spb

Сообщение Miver, исходные данные находятся в модели данных pover pivot, поэтому контекстное меню выглядит иначе.

Как Вы можете заметить в контекстном меню отсутствует уровень структуры при Развернуть/Свернуть, аналогично отсутствующей возможности группировки.
При возможности я бы с самого начала загрузил файл аналогичный оригиналу. Но это невозможно, т.к. при использовании модели данных PoverPivot, независимо от кол-ва строк и столбцов внутри, файл будет превышать допустимый размер в 100кб.
В общем, обходными путями честно не получится. В данном случае нужен именно макрос.

Привожу пример контекстного меню в моем случае.
Автор — Dmitry_spb
Дата добавления — 06.08.2015 в 12:57

Источник

VBA Group Rows & Columns

In this Article

This tutorial will demonstrate how to group and ungroup rows and columns in VBA.

Group Rows or Columns

To group rows or columns apply the Group Method to the rows or columns:

Ungroup Rows or Columns

To ungroup the rows or columns, simply use the Ungroup Method:

Expand All “Grouped” Outline Levels

To expand all grouped outline levels, use this line of code:

To collapse all outline levels, use this line of code:

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

VBA Code Generator

AutoMacro: VBA Add-in with Hundreds of Ready-To-Use VBA Code Examples & much more!

What is AutoMacro?

AutoMacro is an add-in for VBA that installs directly into the Visual Basic Editor. It comes loaded with code generators, an extensive code library, the ability to create your own code library, and many other time-saving tools and utilities that add much needed functionality to the outdated VBA Editor.

Источник

Adblock
detector

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
Регистрация: 01.01.1970

А в 2007 макрорекордер это не пишет :-(

 

Alex_ST

Пользователь

Сообщений: 2746
Регистрация: 22.12.2012

На лицо ужасный, добрый внутри

А что, кнопка с макросом будет удобнее, чем всё равно уже имеющийся (и никуда вы от него не денетесь) слева значок сворачивания/разворачивания группировки?

С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!)
<#0>

 

мне-то конечно легче…но задача поставлена, выполнять надо…как сделать — не знаю, вот и прошу совета…  

  ЗЫ вся работа ведется в 2003-ем

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

 

Alex_ST

Пользователь

Сообщений: 2746
Регистрация: 22.12.2012

На лицо ужасный, добрый внутри

слэн,  
где вы такого набрались?  

  Private Sub CommandButton1_Click()  
ActiveSheet.Outline.ShowLevels 1 — Rows(2).Hidden  
End Sub  

  в одной строке из одной КОМАНДЫ ВЫЧИТАЕТЕ ДРУГУЮ КОМАНДУ!!!  
сижу, пялюсь, смотрю разные справки, НЕ ПОНИМАЮ КАК ЭТО РАБОТАЕТ!!!  
Но ведь работает же!

С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!)
<#0>

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

тут почитал, там почитал  

  спасибо родителям, которые научили меня читать :)

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

ps там не вычитаются команды, это глыбже..  

  при таком вызове метода после имени метода все считается параметром  

  т.о. параметр  1 -rows(2).hidden  

  вычислится, попутно преобразовав логическое значение в числовое(которое, кстати говоря, здесь понимается не так, как в икселе — здесь истина преобразуется в минус единицу)

 

Слэн, спасибо огромное )))    
PS тему прошу пока не закрывать, вдруг еще вопросы возникнут…мне ж это еще применить нужно…судя по коду — он абсолютно все группы сворачивает…постараюсь сам кнопку по уровням сделать…

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

нет, в этом написании получаются две команды: showlevel 0 — закрыть  

  и showlevel 2  

  в данном случае уровней всего два — первый и второй  

  ноль преобразуется самим методом в единицу  

    вот такая цепочка неявных преобразований..  

  к сожалению как узнать текущий уровень я не знаю..

 

Alex_ST

Пользователь

Сообщений: 2746
Регистрация: 22.12.2012

На лицо ужасный, добрый внутри

Спасибо за разъяснение.  
Вроде понял как сделано ЭТО.  
Просто  
  ActiveSheet.Outline.ShowLevels 1 — Rows(2).Hidden  
это до невозможности сокращенная запись:  
  ActiveSheet.Outline.ShowLevels rowLevels:=(1 — Rows(2).Hidden)  
Тогда получается, что если ряд 2 скрыт, то Rows(2).Hidden = True = -1, а следовательно:  
  ActiveSheet.Outline.ShowLevels rowLevels:=2 — показать уровень 2  
а если ряд 2 показан, то Rows(2).Hidden = False = 0, а следовательно:  
  ActiveSheet.Outline.ShowLevels rowLevels:=1 — показать уровень 1  

  КРУТО!  
Но повторить такое при необходимости когда будет нужно точно не смогу :(

С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!)
<#0>

 

Igor67

Пользователь

Сообщений: 3726
Регистрация: 21.12.2012

А разве не проходит?    
Rows(i).OutlineLevel  
Проходил по строкам, сосчитывал уровень группировки.

 

I am

Гость

#13

10.12.2010 10:31:13

А не подскажите как по аналогии сделать так чтоб выводилась вся строчка 4 категории?

Прикрепленные файлы

  • post_182581.rar (3.51 КБ)

I’m hoping someone may be able to help get me here…

I have a huge list and am using grouping to organize it:

enter image description here

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?

Like this post? Please share to your friends:
  • Vba excel работа с формулами
  • Vba excel самоучитель книга
  • Vba excel работа с формами
  • Vba excel самоучитель для чайников pdf
  • Vba excel работа с фильтром