2016-12-16 91 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),如果在公式欄中包含任何內容,它是不是計爲空白的單元格?對於這個特定的電子表格,所有的單元格都是從不同的電子表格中填充的,所以當單元格爲空時,編輯欄不是。我在想這就是爲什麼你的上面的代碼不適合我。 –