Excel 用VBA动态隐藏行
我有一个电子表格,它隐藏了除日期和指定区域以外的所有行,如下所示:Excel 用VBA动态隐藏行,excel,vba,Excel,Vba,我有一个电子表格,它隐藏了除日期和指定区域以外的所有行,如下所示: 'Get week no value... wk = Range("$B$2").Value 'If value changes... If Target.Address = "$B$2" Then 'Hide all rows/weeks... Range("allWeeks").Select Application.Selection.EntireRow.Hidden = True '...but show week s
'Get week no value...
wk = Range("$B$2").Value
'If value changes...
If Target.Address = "$B$2" Then
'Hide all rows/weeks...
Range("allWeeks").Select
Application.Selection.EntireRow.Hidden = True
'...but show week selected by 'wk'
Range(wk).Select
Application.Selection.EntireRow.Hidden = False
Option Explicit
Sub HideRows()
Dim mainRng As Range
Set mainRng = Range("A2:A" & Range("A" & Rows.count).End(xlUp).Row)
Dim unionRng As Range
Dim i As Long
For i = mainRng.Row To mainRng.Row + mainRng.Rows.count - 1
If Cells(i, 1).Value2 = "HC" Then
If Not unionRng Is Nothing Then
Set unionRng = Union(unionRng, Cells(i, 1))
Else
Set unionRng = Cells(i, 1)
End If
End If
Next i
If Not unionRng Is Nothing Then unionRng.EntireRow.Hidden = True
End Sub
一切都很好。然而。在每个指定的星期内,我都会在要隐藏的行的A列中隐藏由“HC”定义的计算行。Range(wk)的显示将隐藏这些隐藏行,因此我引入了一个循环来关闭所有“HC”隐藏列
Dim x As Integer
For x = 1 To 1500
If Sheet1.Cells(x, 1).Value = "HC" Then
Sheet1.Rows(x).Hidden = True
End If
Next
End Sub
结果是,它有点工作,但我必须等待几秒钟的过程来完成,每次我输入一个单元格,这是使表几乎无法工作。任何指点都将不胜感激 通常,您希望在循环中建立一个要隐藏的行范围,然后分别隐藏该范围。您可以使用以下函数构建要隐藏的范围:
'Get week no value...
wk = Range("$B$2").Value
'If value changes...
If Target.Address = "$B$2" Then
'Hide all rows/weeks...
Range("allWeeks").Select
Application.Selection.EntireRow.Hidden = True
'...but show week selected by 'wk'
Range(wk).Select
Application.Selection.EntireRow.Hidden = False
Option Explicit
Sub HideRows()
Dim mainRng As Range
Set mainRng = Range("A2:A" & Range("A" & Rows.count).End(xlUp).Row)
Dim unionRng As Range
Dim i As Long
For i = mainRng.Row To mainRng.Row + mainRng.Rows.count - 1
If Cells(i, 1).Value2 = "HC" Then
If Not unionRng Is Nothing Then
Set unionRng = Union(unionRng, Cells(i, 1))
Else
Set unionRng = Cells(i, 1)
End If
End If
Next i
If Not unionRng Is Nothing Then unionRng.EntireRow.Hidden = True
End Sub
有时,当您想要一次更新太多内容时,UI会变得有点无响应 我发现,在进行这些更改时禁用UI更新,会将速度提高一个数量级:
Sub XXX()
...
On Error GoTo EH
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.StatusBar = "I'm working on it..."
' do lots of changes in cells, rows, sheets...
' Undo the accel changes:
CleanUp:
On Error Resume Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.StatusBar = False
Exit Sub
EH:
' Do error handling
MsgBox "Error found: " & Err.Description
GoTo CleanUp
End Sub
看
而且通常,您应该建立一个要隐藏的行范围,然后分别隐藏该范围的行数。通过将所有这些代码放在我自己的代码之上,除了我放在我的终端Sub前面的执行行之外,我在加入@A.M.的应用程序后,使其正常工作。屏幕更新建议。再次感谢。我为你守候。