6

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

笔记:

  • “手动”命令位于数据 > 大纲 > 分组/取消分组
  • 在 excel 2003 中,这曾经有效:someSheet.columns(i).ShowDetail = True / False但它在 2010 年不再适用于组(仅适用于数据透视表和小计分组)
  • 录制宏不会产生任何我可以使用的代码

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

4

3 回答 3

4

在 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
于 2013-02-12T17:44:26.903 回答
3

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

如果我选择的单元格在摘要行上,则 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)
于 2013-06-28T06:01:57.073 回答
0

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

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.
于 2016-08-23T14:18:44.840 回答