excel - 如何隐藏某一列中包含空白单元格的所有行?

标签 excel vba loops

我试图隐藏在某一列(SOW 选项卡中的 H 列)中具有空白单元格的所有行。

此相同的宏(不同的行但相同的语法)在此工作簿的第三个选项卡上工作。我检查了,范围内的每一行都是正确的。会不会是范围太长了?

Sub HideRowsInSOW_LOOP()
Dim r As Range, c As Range
Set r = Range("H27:H46,H48:H67,H69:H88,H90:H109,H111:H130,H132:H151,H153:H172,H174:H193,H195:H214,H216:H235,H237:H256,H258:H277,H279:H298,H300:H319,H321:H340,H342:H361,H369:H388,H390:H409,H411:H430,H432:H451,H453:H472,H474:H493,H495:H514,H516:H535,H537:H556,H558:H577,H579:H598,H600:H619,H621:H640,H642:H661,H663:H682,H684:H703")
Application.ScreenUpdating = False
For Each c In r
    If c.Value = 0 Then
        c.EntireRow.Hidden = True
    Else
        c.EntireRow.Hidden = False
    End If
Next c
Application.ScreenUpdating = True
End Sub

运行此程序时,我收到以下错误:

run-time error '1004' error message: Method 'Range' of object '_Global' failed



我有一个更长的宏,它成功地达到了同样的目的,我担心它会减慢我的工作簿/继续听到循环更好。

最佳答案

您的代码可能不适用于相关工作表,因为范围不完全合格。 Set r = Range("H27:H46,... .该范围是指事件表。

这是使用 AutoFilter 的一种方法这将隐藏列中的空白行。这比在庞大的数据集中循环要快得多。

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long
    Dim rngColH As Range
    Dim rngToHide As Range

    '~~> Chage this to the relevant sheet
    Set ws = Sheet1

    With ws
        '~~> Remove any autofilter if any
        .AutoFilterMode = False

        '~~> Find last row in Col H
        lRow = .Range("H" & .Rows.Count).End(xlUp).Row

        '~~> Construct your range
        Set rngColH = .Range("H1:H" & lRow)

        '~~> Filter on blanks
        With rngColH
            .AutoFilter Field:=1, Criteria1:="="
            '~~> These are your blank rows (i.e if there are any)
            Set rngToHide = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
        End With

        .AutoFilterMode = False

        '~~> Hide the rows
        If Not rngToHide Is Nothing Then rngToHide.Hidden = True
    End With
End Sub

下面是它的工作原理...

enter image description here

使用 .SpecialCells(xlCellTypeBlanks)正如@Mikku 建议的那样也是一个好方法:)

关于excel - 如何隐藏某一列中包含空白单元格的所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57584887/

相关文章:

java - 使用 jxls 写入大量行以在 java 中表现出色

excel - VBA宏将过滤后的数据复制并粘贴到新工作表

JavaScript 迭代对象属性 - 陷入循环引用循环

excel - 具有多个变量可能性的复杂 IF 语句

excel - 在具有公共(public) ID 的单元格范围内满足多个条件时返回替代值

excel - 如何自动强制关闭excel,然后重新启动?

VBA 使用循环引用文本框或标签

vba - 公式拖拽查询

c++ - C++ `for`在应为多个的情况下仅循环迭代一次。

javascript - 如何解释结果(理解js中的let和var)