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

Vba 以编程方式分组和取消分组行或列,vba,excel,excel-2010,Vba,Excel,Excel 2010,是否有一种方法可以通过编程方式对Excel 2010中的列或行进行分组/取消分组 注: “手动”命令位于数据>大纲>分组/解组中 在excel 2003中,这一功能曾经有效:someSheet.columns(i).ShowDetail=True/False,但在2010年,它不再适用于组(仅适用于透视表和小计组) 录制宏不会产生任何我可以使用的代码 更准确地说,在Excel 2010中调用myRange.showtail=True确实会扩展折叠的组,但如果该组已展开,则会引发错误。无论组是

是否有一种方法可以通过编程方式对Excel 2010中的列或行进行分组/取消分组

注:

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

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

在Excel 2010中,无论组是折叠还是展开,
showdeail
属性始终返回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

关于不在透视表中的行。。。根据我在Excel 2010中的经验,ShowDetail的计算结果并非总是正确的。我想是的,但我没有意识到我需要在汇总行中才能使该属性按预期工作。其次,我没有意识到默认情况下摘要行位于分组行下。一旦我更改了该设置,将摘要行放在分组行的上方(在Ribbon:Data>Outline中,显示Outline Dlg框),对折叠/展开的测试就变得更加清晰了

如果我选择的单元格位于摘要行上,则如果显示分组记录,则ShowDetail将评估为True,如果未显示分组记录,则评估为False。对我来说,关键是在总结行看到行为是这样运作的。在默认情况下,让上面的子行/分组行确实让我感到困惑

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

请注意,工作表保护可防止扩展和折叠单元格组。我的工作表是受保护的,因此我取消对工作表的保护以展开/折叠,然后在展开/折叠后重新对其进行保护。(对我来说,一个可能的改进是仅取消保护/保护当前工作表,而不是所有工作表。)


最好的方法是只更改隐藏区域中单元格的列宽。这将自动取消对所选内容的分组

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.

你不必做那些额外的工作。。您只需执行工作表即可。enableOutlineing=true;
(Target.Offset(1, 0).EntireRow.OutlineLevel = 2)
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.