所以我的问题是我有一个工作表,其中存在许多分组的行。这些行分为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
任何帮助将不胜感激。
答案 0 :(得分:1)
您可以由于Worksheet_Change()
事件而启动宏。