VBA macro to Collapse/Expand all grouped rows/columns

imaguy77

New Member
Joined
Aug 26, 2008
Messages
21
Hi all,

I'd like to be able to run a macro which would collapse or expand all grouped rows and columns for all selected worksheets. When I say collapse or expand, i don't need any selection dialog box or anything...just the code which would accomplish it. Thanks!!
 

Some videos you may like

Excel Facts

How can you automate Excel?
Press Alt+F11 from Windows Excel to open the Visual Basic for Applications (VBA) editor.

Jerry Sullivan

MrExcel MVP
Joined
Mar 18, 2010
Messages
8,787
The Outline.ShowLevels method allows you to show a specified number of
RowLevels and Column Levels.

To Collapse all Rows and Columns...
Code:
Sub Collapse_All()
    ActiveSheet.Outline.ShowLevels RowLevels:=1, ColumnLevels:=1
End Sub
To Expand all Rows and Columns...
Code:
Sub Expand_All()
    ActiveSheet.Outline.ShowLevels RowLevels:=8, ColumnLevels:=8
End Sub
And anything in between....
Code:
Sub Collapse_Rows_to_Level2_Expand_All_Columns()
    ActiveSheet.Outline.ShowLevels RowLevels:=2, ColumnLevels:=8
End Sub
 

Jerry Sullivan

MrExcel MVP
Joined
Mar 18, 2010
Messages
8,787
I just noticed you want to apply this to all on selected worksheets.

I'd like to be able to run a macro which would collapse or expand all grouped rows and columns for all selected worksheets.
You can merge the code I posted with the method of iterating through
selected worksheets that Domenic provided you in your recent post.

The result for Expand_All would look like this.

Code:
Sub Expand_All()
    Dim sh As Object
    For Each sh In ActiveWindow.SelectedSheets
        If TypeName(sh) = "Worksheet" Then
            sh.Outline.ShowLevels RowLevels:=8, ColumnLevels:=8
        End If
    Next sh
    Set sh = Nothing
End Sub
You can adapt the other variations the same way.
 

jbaccash

New Member
Joined
Jul 6, 2012
Messages
3
This works great for expanding all rows/columns. I'm having some trouble searching online to find code to expand only one group of columns. I'm running Excel 2010. Googling around, I'm finding code such as:

Range("B:C").Columns.ShowDetail = True

Range("B:C").Columns.ShowLevels ColumnLevels:=2

I'm also guessing with code such as:

Range("B:C").Outline.ShowLevels ColumnLevels:=2

Columns("B:C").Columns.ShowLevels ColumnLevels:=2

I keep getting a "Runtime error 438: Object doesn't support this property or method".

Forgive me but I'm almost a total novice when it comes to writing code in VBA. My experience to date is recording clunky macros and then messing with the resulting code. Clicking on a particular "+" for a group doesn't generate any code when recording.

Any help is appreciated.
 

jbaccash

New Member
Joined
Jul 6, 2012
Messages
3
I also find it strange that

Rows(9).ShowDetail = True

works to expand a particular group of rows but

Columns(C).ShowDetail = True

does not work for columns.
 

Jerry Sullivan

MrExcel MVP
Joined
Mar 18, 2010
Messages
8,787
Hi and Welcome to the Board,

You could use either of these...

Code:
Columns("C").ShowDetail = True

Columns(3).ShowDetail = True
 

Watch MrExcel Video

Forum statistics

Threads
1,102,601
Messages
5,487,795
Members
407,610
Latest member
bellakim00

This Week's Hot Topics

  • Timer in VBA - Stop, Start, Pause and Reset
    [CODE=vba][/CODE] Option Explicit Dim CmdStop As Boolean Dim Paused As Boolean Dim Start Dim TimerValue As Date Dim pausedTime As Date Sub...
  • how to updates multiple rows in muliselect listbox
    Hello everyone. I need help with below code. code is only chaning 1st row in mulitiselect list box. i know issue with code...
  • Delete Row from Table
    I am trying to delete a row from a table using VBA using a named range to find what I need to delete. My Range is finding the right cell. In the...
  • Assigning to a variable
    I have a for each block where I want to assign the value in column 5 of the found row to the variable Serv. [CODE=vba] For Each ws In...
  • Way to verify information
    Hi All, I don't know what to call this formula, and therefore can't search. I have a spreadsheet with information I want to reference...
  • Active Cell Address – Inactive Sheet
    How to use VBA to get the cell address of the active cell in an inactive worksheet and then place that cell address in a location on the current...
Top