循环所有没有三个特定工作表的工作表
Loop all worksheets without three specific sheets
此代码不会从一个工作表循环到另一个工作表。
想法是,对于没有三个指定工作表的所有工作表,隐藏 A 列中不包含“X”的所有行。
Option Explicit
Sub test()
Dim ws As Worksheet
Dim C As Range
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Übersicht" Or ws.Name <> "Definitionen" Or ws.Name <> "Abkürzungen" Then
For Each C In Range("A6:A2000").Cells
If C.Value = "" Then
C.EntireRow.Hidden = True
Else
C.EntireRow.Hidden = False
End If
Next C
Else
End If
Next ws
End Sub
(a)您需要指定工作表:
For Each C In ws.Range("A6:A2000")
(b) 你的If-condition检查sheetname不对,需要把Or
改成And
,否则它将始终为 True,您将处理所有工作表。
(c) 您的代码可能会很慢。将所有行设置为可见,将要隐藏的行收集到 Range-variable(使用 Union
)中,并一次性将它们全部设置为隐藏。
您还应该通过检查每个工作表中使用的行并仅处理这些行来优化您的代码
使用自动筛选隐藏空白行
Option Explicit
Sub HideBlankRows()
Const wsNamesNoList As String = "Übersicht,Definitionen,Abkürzungen"
Dim wsNamesNo() As String: wsNamesNo = Split(wsNamesNoList, ",")
Dim ws As Worksheet
Dim drg As Range ' Data Range (no headers)
Dim vrg As Range ' Visible (Data) Range
For Each ws In ThisWorkbook.Worksheets
If IsError(Application.Match(ws.Name, wsNamesNo, 0)) Then
If ws.AutoFilterMode Then ws.AutoFilterMode = False
With ws.Range("A5:A2000") ' 5 is the header row
.EntireRow.Hidden = False
Set drg = .Resize(.Rows.Count - 1).Offset(1)
.AutoFilter 1, "="
On Error Resume Next
Set vrg = drg.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
End With
ws.AutoFilterMode = False
If Not vrg Is Nothing Then
vrg.EntireRow.Hidden = True
Set vrg = Nothing
End If
End If
Next ws
MsgBox "Blank rows hidden.", vbInformation
End Sub
此代码不会从一个工作表循环到另一个工作表。
想法是,对于没有三个指定工作表的所有工作表,隐藏 A 列中不包含“X”的所有行。
Option Explicit
Sub test()
Dim ws As Worksheet
Dim C As Range
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Übersicht" Or ws.Name <> "Definitionen" Or ws.Name <> "Abkürzungen" Then
For Each C In Range("A6:A2000").Cells
If C.Value = "" Then
C.EntireRow.Hidden = True
Else
C.EntireRow.Hidden = False
End If
Next C
Else
End If
Next ws
End Sub
(a)您需要指定工作表:
For Each C In ws.Range("A6:A2000")
(b) 你的If-condition检查sheetname不对,需要把Or
改成And
,否则它将始终为 True,您将处理所有工作表。
(c) 您的代码可能会很慢。将所有行设置为可见,将要隐藏的行收集到 Range-variable(使用 Union
)中,并一次性将它们全部设置为隐藏。
您还应该通过检查每个工作表中使用的行并仅处理这些行来优化您的代码
使用自动筛选隐藏空白行
Option Explicit
Sub HideBlankRows()
Const wsNamesNoList As String = "Übersicht,Definitionen,Abkürzungen"
Dim wsNamesNo() As String: wsNamesNo = Split(wsNamesNoList, ",")
Dim ws As Worksheet
Dim drg As Range ' Data Range (no headers)
Dim vrg As Range ' Visible (Data) Range
For Each ws In ThisWorkbook.Worksheets
If IsError(Application.Match(ws.Name, wsNamesNo, 0)) Then
If ws.AutoFilterMode Then ws.AutoFilterMode = False
With ws.Range("A5:A2000") ' 5 is the header row
.EntireRow.Hidden = False
Set drg = .Resize(.Rows.Count - 1).Offset(1)
.AutoFilter 1, "="
On Error Resume Next
Set vrg = drg.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
End With
ws.AutoFilterMode = False
If Not vrg Is Nothing Then
vrg.EntireRow.Hidden = True
Set vrg = Nothing
End If
End If
Next ws
MsgBox "Blank rows hidden.", vbInformation
End Sub