有没有办法在Excel 2010中以编程方式对列或行进行分组/取消组合?
注意:
someSheet.columns(i).ShowDetail = True / False
但它在2010年不再适用于组(仅适用于数据透视表和小计分组)更确切地说,在Excel 2010中调用myRange.ShowDetail = True
确实展开了折叠组,但如果该组已经展开,则会引发错误。无论组是否扩展,ShowDetail
属性都返回True。
答案 0 :(得分: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
答案 1 :(得分:3)
关于不在数据透视表中的行...我在Excel 2010中的经验并不是ShowDetail总是评估为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)
答案 2 :(得分: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.