将隐藏行添加到当前 VBA 代码
Add Hiding rows to current VBA code
我编写了 VBA 代码来隐藏工作簿中 4 个不同选项卡中的特定范围。我希望将另一个范围添加到代码中,该范围将根据 4 个不同选项卡中每个选项卡上相同范围内的单元格值隐藏行。如果 B9-B13 范围内的单元格为空,则在每个选项卡上隐藏该特定行。
这是我当前的代码:
Sub HideRowsSummary()
Dim wsMySheet As Worksheet
Dim lngMyRow As Long
Application.ScreenUpdating = False
For Each wsMySheet In ThisWorkbook.Sheets
Select Case wsMySheet.Name
Case Is = "Summary 1", "Summary (2)", "Summary (3)", "Summary (4)"
For lngMyRow = 73 To 24 Step -1 'Need to work backwards through the rows when hiding or deleting
If Len(wsMySheet.Range("A" & lngMyRow)) = 0 Then
wsMySheet.Range("A" & lngMyRow).EntireRow.Hidden = True
Else
wsMySheet.Range("A" & lngMyRow).EntireRow.Hidden = False
End If
Next lngMyRow
End Select
Next wsMySheet
Application.ScreenUpdating = True
End Sub
谢谢观看!
例如在您之前的循环之后直接执行以下操作?使用 Union 将符合条件的行(如果都在同一个 sheet 中)聚集在一起并顺便隐藏起来会更有效。通过这种方式,您可以从两个循环中收集符合条件的行(您也可以将循环合并到其中)并一次性隐藏所有内容。
For lngMyRow = 13 To 9 Step -1 'Need to work backwards through the rows when hiding or deleting
wsMySheet.Range("B" & lngMyRow).EntireRow.Hidden = (wsMySheet.Range("B" & lngMyRow) = vbNullString)
Next lngMyRow
感谢@ScottCraner 指出非常好的shorthand。
具有范围并集的两个循环可能看起来像(未测试):
Option Explicit
Public Sub HideRowsSummary()
Dim wsMySheet As Worksheet
Dim lngMyRow As Long, unionRng As Range
Application.ScreenUpdating = False
For Each wsMySheet In ThisWorkbook.Sheets
Select Case wsMySheet.NAME
Case Is = "Summary 1", "Summary (2)", "Summary (3)", "Summary (4)"
With wsMySheet
.Range("A9:A13, A24:A74").EntireRow.Hidden = False
For lngMyRow = 9 To 13
If .Range("B" & lngMyRow) = vbNullString Then
If Not unionRng Is Nothing Then
Set unionRng = Union(unionRng, .Range("B" & lngMyRow))
Else
Set unionRng = .Range("B" & lngMyRow)
End If
End If
Next lngMyRow
For lngMyRow = 24 To 73
If Len(.Range("A" & lngMyRow)) = 0 Then
If Not unionRng Is Nothing Then
Set unionRng = Union(unionRng, .Range("A" & lngMyRow))
Else
Set unionRng = .Range("A" & lngMyRow)
End If
End If
Next lngMyRow
End With
End Select
If Not unionRng Is Nothing Then unionRng.EntireRow.Hidden = True
Set unionRng = Nothing
Next wsMySheet
Application.ScreenUpdating = True
End Sub
我编写了 VBA 代码来隐藏工作簿中 4 个不同选项卡中的特定范围。我希望将另一个范围添加到代码中,该范围将根据 4 个不同选项卡中每个选项卡上相同范围内的单元格值隐藏行。如果 B9-B13 范围内的单元格为空,则在每个选项卡上隐藏该特定行。
这是我当前的代码:
Sub HideRowsSummary()
Dim wsMySheet As Worksheet
Dim lngMyRow As Long
Application.ScreenUpdating = False
For Each wsMySheet In ThisWorkbook.Sheets
Select Case wsMySheet.Name
Case Is = "Summary 1", "Summary (2)", "Summary (3)", "Summary (4)"
For lngMyRow = 73 To 24 Step -1 'Need to work backwards through the rows when hiding or deleting
If Len(wsMySheet.Range("A" & lngMyRow)) = 0 Then
wsMySheet.Range("A" & lngMyRow).EntireRow.Hidden = True
Else
wsMySheet.Range("A" & lngMyRow).EntireRow.Hidden = False
End If
Next lngMyRow
End Select
Next wsMySheet
Application.ScreenUpdating = True
End Sub
谢谢观看!
例如在您之前的循环之后直接执行以下操作?使用 Union 将符合条件的行(如果都在同一个 sheet 中)聚集在一起并顺便隐藏起来会更有效。通过这种方式,您可以从两个循环中收集符合条件的行(您也可以将循环合并到其中)并一次性隐藏所有内容。
For lngMyRow = 13 To 9 Step -1 'Need to work backwards through the rows when hiding or deleting
wsMySheet.Range("B" & lngMyRow).EntireRow.Hidden = (wsMySheet.Range("B" & lngMyRow) = vbNullString)
Next lngMyRow
感谢@ScottCraner 指出非常好的shorthand。
具有范围并集的两个循环可能看起来像(未测试):
Option Explicit
Public Sub HideRowsSummary()
Dim wsMySheet As Worksheet
Dim lngMyRow As Long, unionRng As Range
Application.ScreenUpdating = False
For Each wsMySheet In ThisWorkbook.Sheets
Select Case wsMySheet.NAME
Case Is = "Summary 1", "Summary (2)", "Summary (3)", "Summary (4)"
With wsMySheet
.Range("A9:A13, A24:A74").EntireRow.Hidden = False
For lngMyRow = 9 To 13
If .Range("B" & lngMyRow) = vbNullString Then
If Not unionRng Is Nothing Then
Set unionRng = Union(unionRng, .Range("B" & lngMyRow))
Else
Set unionRng = .Range("B" & lngMyRow)
End If
End If
Next lngMyRow
For lngMyRow = 24 To 73
If Len(.Range("A" & lngMyRow)) = 0 Then
If Not unionRng Is Nothing Then
Set unionRng = Union(unionRng, .Range("A" & lngMyRow))
Else
Set unionRng = .Range("A" & lngMyRow)
End If
End If
Next lngMyRow
End With
End Select
If Not unionRng Is Nothing Then unionRng.EntireRow.Hidden = True
Set unionRng = Nothing
Next wsMySheet
Application.ScreenUpdating = True
End Sub