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