2016-12-16 92 views
0

我想隐藏工作表中的所有行,如果引用单元格中没有文本。我正在使用以下公式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 

当我运行它时,它会无限期地运行,并且我必须退出任务管理器中的程序。我认为这是因为我最初没有定义c。我对此有纠正吗?

谢谢您花时间回复!

+1

顶部添加On Error Resume Next尝试去功能活动。这不应该陷​​入无限循环。我的猜测是,这种变化正在触发另一个导致它的事件。 –

回答

1

第一关就可以缩短,加快你的代码就像如下:

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 

其可以由少得多的冗长喜欢如下:

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 

与只有CA veat应该没有行匹配标准,则它会返回一个错误

这应该是一个问题,那么就在的子

+0

对于.SpecialCells(xlCellTypeBlanks),如果在公式栏中包含任何内容,它是不是计为空白的单元格?对于这个特定的电子表格,所有的单元格都是从不同的电子表格中填充的,所以当单元格为空时,编辑栏不是。我在想这就是为什么你的上面的代码不适合我。 –