Excel隐藏行公式

我试图隐藏工作表中的所有行,如果参考单元格中没有文本。 我使用下面的公式

Option Explicit Private Sub Worksheet_Activate() Dim r As Range, c As Range Set r = Range("d4:f1000") Application.ScreenUpdating = False For Each c In r If Len(c.Text) = 0 Then c.EntireRow.Hidden = True Else c.EntireRow.Hidden = False End If Next c Application.ScreenUpdating = True End Sub 

当我运行它无限期运行,我必须退出程序在任务pipe理器。 我想这是因为我最初没有定义c。 我正确的吗?

感谢您花时间回复!

首先你可以缩短和加快你的代码,如下所示:

 Option Explicit Private Sub Worksheet_Activate1() Dim r As Range, c As Range Set r = Range("d4:f1000") Application.ScreenUpdating = False For Each c In r c.EntireRow.Hidden = Len(c.Text) = 0 Next c Application.ScreenUpdating = True End Sub 

但是如果您隐藏了同一行中范围D4:F100单元格的所有行之后,则可以使用以下代码:

 Private Sub Worksheet_Activate4() Application.ScreenUpdating = False With Range("D4:F1000") '<-- reference your range With .Columns(1).SpecialCells(xlCellTypeBlanks) '<--| reference its 1st column blank cells With .Offset(, 1).SpecialCells(xlCellTypeBlanks) '<--| reference referenced blank cells whose side cell is blank With .Offset(, 1).SpecialCells(xlCellTypeBlanks) '<--| reference referenced blank cells whose side cell is blank .EntireRow.Hidden = True '<--| hide rows when all three cells are blank End With End With End With End With Application.ScreenUpdating = True End Sub 

这可以做得更less,如下所示:

 Private Sub Worksheet_Activate5() Application.ScreenUpdating = False Range("D4:F1000") _ .Columns(1).SpecialCells(xlCellTypeBlanks) _ .Offset(, 1).SpecialCells(xlCellTypeBlanks) _ .Offset(, 1).SpecialCells(xlCellTypeBlanks) _ .EntireRow.Hidden = True '<--| hide rows when all three cells are blank Application.ScreenUpdating = True End Sub 

与唯一的警告,如果没有行匹配的标准,它会返回一个错误

如果这是一个问题,那么只需在子的顶部添加On Error Resume Next