循环所有没有三个特定工作表的工作表

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