首页 文章

以编程方式对行或列进行分组和取消分组

提问于
浏览
5

有没有办法在Excel 2010中以编程方式对列或行进行分组/取消组合?

注意:

  • "manual"命令位于Data> Outline> Group / Ungroup中
    在excel 2003中

  • ,这曾经工作: someSheet.columns(i).ShowDetail = True / False 但它在2010年不再适用于组(仅适用于数据透视表和小计分组)

  • 录制宏不会产生任何我可以使用的代码

更确切地说,在Excel 2010中调用 myRange.ShowDetail = True 确实展开了折叠组,但如果该组已经展开,则会引发错误 . 并且无论组是否扩展, ShowDetail 属性都返回True .

3 回答

  • 3

    在Excel 2010中, ShowDetail 属性始终对组返回true,无论它是折叠还是展开 . 可以使用 Hidden 属性:

    'to expand
    If myRange.EntireColumn.Hidden Then
        myRange.EntireColumn.ShowDetail = True
    End If
    
    'to collapse
    If Not myRange.EntireColumn.Hidden Then
        myRange.EntireColumn.ShowDetail = False
    End If
    
  • 0

    关于不在数据透视表中的行...在Excel 2010中,ShowDetail ALWAYS评估为True并不是我的经验 . 我认为它确实如此,但我没有意识到我需要在摘要行上让这个属性按预期工作 . 其次,我没有意识到默认情况下摘要行是在分组行之下 . 一旦我将该设置更改为在分组行上方具有摘要行(在功能区:数据>大纲,显示大纲框中),折叠/展开的测试变得更加清晰 .

    如果我选择的单元格位于摘要行上,则ShowDetail会在显示分组记录时评估为True,如果不显示则评估为False . 我的关键是在摘要行上看到这种行为是这样的 . 默认情况下将孩子/分组行放在上面真的让我感到震惊 .

    这是我的宏,当我在摘要行上选择一个单元格时,它会动态扩展和折叠绑定到摘要行的分组记录 . 并且,如果扩展部分,它会使我的单元格在列A中变为粗体 . 如果我选择了多个单元格,则此宏不会运行 .

    请注意,工作表保护可防止展开和折叠单元格组 . 我的工作表受到保护,因此我取消保护工作表以展开/折叠,然后重新保护它们 . (可能的改进是我只是取消保护/保护当前的工作表而不是所有工作表 . )

    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
    

    请记住,我将摘要行设置为在分组记录之上 . 如果摘要行低于分组记录(默认值),则偏移行引用必须更改为-1,如下所示:

    (Target.Offset(1, 0).EntireRow.OutlineLevel = 2)
    
  • 3

    最好的方法是只更改隐藏范围内单元格的列宽 . 这将自动取消组合选择 .

    dim wsA as worksheet
    set wsA = Worksheets("Name of your Worksheet")
    wsA.Columns("A:AJ").Columns.Group 
    wsA.Range("A:A").ColumnWidth = 22.22 
    ' make the change to one of the cells in the group that you want to unhide.
    

相关问题