关于不在数据透视表中的行......我在 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)