Vba 如何自动调整扩展行的大小?

Vba 如何自动调整扩展行的大小?,vba,excel,event-handling,row,Vba,Excel,Event Handling,Row,所以我的问题是,我有一个表,其中存在大量分组行。这些行分为两个级别。为了更好地理解这一点,我有一个小组,涵盖A1:A55中的行。在第一级组中,我有多个第二级组,覆盖较小的部分(例如A2:A5中的行、A7:A10中的行等等)。由于Excel会自动将相邻的组添加到一起,因此我在每个第二级行组(A6、A11等)之间添加了一个空行。然后我继续将这些空白行的高度更改为0,00。这隐藏了左侧栏上用于折叠/展开的+和-符号,这不是问题,因为折叠和展开是通过工作表上的按钮处理的 然而,当所有分组行,或者仅仅是第

所以我的问题是,我有一个表,其中存在大量分组行。这些行分为两个级别。为了更好地理解这一点,我有一个小组,涵盖A1:A55中的行。在第一级组中,我有多个第二级组,覆盖较小的部分(例如A2:A5中的行、A7:A10中的行等等)。由于Excel会自动将相邻的组添加到一起,因此我在每个第二级行组(A6、A11等)之间添加了一个空行。然后我继续将这些空白行的高度更改为0,00。这隐藏了左侧栏上用于折叠/展开的+和-符号,这不是问题,因为折叠和展开是通过工作表上的按钮处理的

然而,当所有分组行,或者仅仅是第二级分组行,都在扩展(手动或通过宏)时,所有空白行的行高度跳回到Excel可以再次显示左侧栏中的+和符号的大小。这显示了我想阻止的空白行。

我知道我可能无法阻止行的大小调整,所以它显示了+和-符号,但是我正在考虑立即将空白行调整为0的高度。这是在通过按钮调用的宏中构建的,但问题是当用户手动展开行时。在事件处理程序中没有可用于折叠和/或扩展的事件。有没有办法让我自动响应用户的手动扩展操作

我提供了下面使用的代码示例

Sub Select1Year_Click()

Dim ws1 As Worksheet
Set ws1 = Worksheets("Overview")
Dim ws2 As Worksheet
Set ws2 = Worksheets("Selection Tab")
Dim ROffset As Integer
ROffset = ((ws2.Range("B33").Value - 1) * 4)    'User defined starting Year 
                                                'value

On Error Resume Next
With ws1
    .Range("AJ2").Rows.ShowDetail = False    '2018
    .Range("AJ7").Rows.ShowDetail = False    '2019
    .Range("AJ12").Rows.ShowDetail = False    '2020
    .Range("AJ17").Rows.ShowDetail = False    '2021
    .Range("AJ22").Rows.ShowDetail = False    '2022
    .Range("AJ27").Rows.ShowDetail = False    '2023
    .Range("AJ32").Rows.ShowDetail = False    '2024
    .Range("AJ37").Rows.ShowDetail = False    '2025
    .Range("AJ42").Rows.ShowDetail = False    '2026
    .Range("AJ47").Rows.ShowDetail = False    '2027
    .Range("AJ52").Rows.ShowDetail = False    '2028
End With

If ws2.Range("B31").Value = 1 Then    'User selected 1 year to be shown in 
                                      'expanded view
    ws1.Range("AJ2").Offset(0, ROffset).Rows.ShowDetail = True
End If

End Sub
'------------------------------------------------------------------------
    Sub Select10Year_Click()

Dim ws1 As Worksheet
Set ws1 = Worksheets("Overview")
Dim ws2 As Worksheet
Set ws2 = Worksheets("Selection Tab")
Dim i As Integer
Dim ROffset As Integer
ROffset = ((ws2.Range("B33").Value - 1) * 4)    'User defined starting Year 
                                                'value

If ws2.Range("B31").Value = 3 Then    'User selected all years to be expanded
    On Error Resume Next
    ws1.Shapes("Select10Year").ControlFormat.Value = True
    With ws1
        .Range("AJ2").Rows.ShowDetail = True    '2018
        .Range("AJ7").Rows.ShowDetail = True    '2019
        .Range("AJ12").Rows.ShowDetail = True    '2020
        .Range("AJ27").Rows.ShowDetail = True    '2021
        .Range("AJ22").Rows.ShowDetail = True    '2022
        .Range("AJ27").Rows.ShowDetail = True    '2023
        .Range("AJ32").Rows.ShowDetail = True    '2024
        .Range("AJ37").Rows.ShowDetail = True    '2025
        .Range("AJ42").Rows.ShowDetail = True    '2026
        .Range("AJ47").Rows.ShowDetail = True    '2027
        .Range("AJ52").Rows.ShowDetail = True    '2028
    End With
    If ROffset > 0 Then    'User has selected a different starting year then 
                           '2018, so collapse are years before selected 
                           'starting year
        For i = 0 To i = ROffset Step 1
            ws1.Range("AJ2").Offset(0, ROffset).Rows.ShowDetail = False
        Next i
    End If
End If

End Sub

任何帮助都将不胜感激。

您可以通过
工作表_Change()
事件启动宏。

如果从未使用+/-按钮手动执行显示/隐藏,那么您是否可以仅使用VBA eg
行(5)。Hidden=True来显示/隐藏行而不进行分组?通过这种方式,您可以单独显示/隐藏任何行,并且您根本不需要间隔行。让我重申一下,它永远不应该在第二级上完成。但是,用户也可以这样做,因为第一级扩展用作排序的快速过滤器(根据用户请求)。折叠/扩展行属于工作表_change()事件?听起来不错,伊玛试试看,提前谢谢!