2017-08-10 53 views
0

我試圖創建一個隱藏行,如果特定列中的單元格包含0值的宏。數據更新後重新運行Excel宏

我發現從另一個論壇使用的宏將隱藏行(下面),但它只會在數據第一次刷新時隱藏行。我在表格的頂部使用數據驗證單元格,該單元格從另一個工作表中提取數據以填充參考數據(而工作表的其餘部分使用SUMIFS)。

當我的團隊更新單元格以選擇各種選項(例如:美國,亞洲,歐洲,全部)時,我需要再次運行宏才能隱藏任何包含0值的單元格。我也不能有一個宏會混淆在工作表中使用的SUMIFS公式。

電流公式我:

Sub HideRows() 
Application.ScreenUpdating = False 
Application.Calculation = xlManual 

For Each c In Range("E7:E153") 
    If c.Value = 0 Then Rows(c.Row).Hidden = True 
Next 

Application.Calculation = xlAutomatic 
Application.ScreenUpdating = True 
End Sub 

我想我需要的是添加某種在年底重新運行或循環線,但我不知道在哪裏何去何從。任何幫助將不勝感激。

TYVM。

+0

「...隱藏任何包含0值的單元格」。你想隱藏那一行嗎?柱?或者從字面上看就是那個單元格你不能完全(AFAIK)隱藏一個單元格......但也許我們可以通過使文本變成白色或其他東西來「隱藏」它? – BruceWayne

回答

0
Private Sub Worksheet_Change(ByVal Target As Range) 

    MsgBox "You just changed " & Target.Address 

End Sub 

http://www.ozgrid.com/VBA/run-macros-change.htm

只是參考target.Address借到chages特定的細胞,然後把它稱之爲HideRows

如果您需要事先取消隱藏所有行只添加這代碼到您的程序ActiveSheet.Cells.EntireRow.Hidden = False

+0

@KPaul它有什麼關係嗎?如果target.Address改變並且它調用了他的sub,那麼最終的結果仍然可以達到。重點是說明如何使用worksheet_change事件。沒有提到我從來沒有說過任何地方隱藏行。我說過「然後讓它調用hideRows」sub,這是他工作的sub的名字。基本的面向對象,如果你分開工作表的變化形式隱藏行子(這是應該做的第一個地方,哈哈) –

+0

嗨@KPaul布魯斯韋恩和DougCoats非常感謝你的幫助。我嘗試了您提供的宏,它在您第一次過濾數據時起作用,但如果要篩選更多選項,則不會清除隱藏的行。例如:如果我要過濾歐洲,然後再回到全部,然後由銷售人員進行過濾,則前一個過濾器的隱藏行不會隱藏。因此,當我大致進行3次數據更新時,我沒有剩下行。 是否有可以進行更新,以便來自1個過濾器的隱藏行在下一次數據刷新時變爲不隱藏/不相關? 再次感謝! – bgreen

+0

也許宏可以填充所有單元格包含0的特定顏色,然後我可以使用過濾器選項按顏色進行過濾 - 這是否行得通? – bgreen

1

您可以使用Worksheet_Change事件。

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Count = 1 Then 
     Application.ScreenUpdating = False 
     Application.Calculation = xlManual 

     For Each c In Range("E7:E153") 
      If c.Value = 0 Then Rows(c.Row).Hidden = True Else Rows(c.Row).Hidden = False 
     Next 

     Application.Calculation = xlAutomatic 
     Application.ScreenUpdating = True 
    End If 
End Sub 
+0

嗨, 這與之前的問題相同 - 它不會隱藏之前數據過濾器之後的行。 改變,而不是要求,但只有當我點擊數據刷新後的單元格時才執行宏。沒關係,但有沒有辦法讓它自己做? – bgreen

+0

嘗試添加Else行(c.Row).Hidden = False。我上面更新了我的答案。 –

+0

@K Paul它的工作原理!謝謝!任何想法,如果有辦法讓它,以便您不必點擊以讓宏再次執行(又名取消隱藏/隱藏行)? – bgreen