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

时间:2018-07-17 12:16:29

标签: excel vba excel-vba event-handling row

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

但是,当所有分组的行或仅第二级分组的行被扩展时(手动或通过宏),所有空白行的行高都跳回到Excel可以显示的大小。 +和-再次在左侧栏中签名。这显示了我要防止的空白行。

我知道我可能无法阻止调整行的大小,因此它显示+和-号,但是我正在考虑立即将空白行的大小调整为0.00。这是在通过按钮调用的宏中构建的,但是要注意的是,当用户手动扩展行时。没有事件可供我折叠和/或扩展以在事件处理程序中使用。我有什么办法可以对用户的手动展开操作产生自动响应?

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

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以由于Worksheet_Change()事件而启动宏。