2015-03-25 49 views
0

當三個顏色「D」,「E」和「F同時顯示零值時,我寫了一個VBA代碼來自動隱藏行,如果其中任何一個沒有-zero的值不應該隱藏行,而且我也想添加「#N/A」,就像#NA有零就應該隱藏行一樣如何在VBA中的if語句中給出多個條件

但是好像有些問題與代碼,請

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

For Each x In Range("D2:D2000") 
Next 
For Each y In Range("E2:E2000") 
Next 
For Each Z In Range("F2:F2000") 
Next 
If x.Value = 0 And y.Value = 0 And Z.Value = 0 Then x.EntireRow.Hidden = True 

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

你知道如何嵌套循環嗎?你有三個循環什麼都不做,然後在最後一個IF語句不檢查(很可能檢查D2000,E2000,F2000)。所有的「下一個」應該至少在IF聲明之後。 – cybermike 2015-03-25 04:59:44

+0

你能幫我解碼嗎?我是新來的VBA @cybermike – 2015-03-25 05:04:53

回答

0

歡迎幫助我。到現場!

你的語法是不正確的。釷e循環For Each ... Next應包含您想要重複的代碼。由於你的循環裏面不包含任何東西,它什麼都不做。我想爲你寫一個可以理解的代碼:

Sub HideRows() 
Dim i as Long 'Counter 
Application.ScreenUpdating = False 
Application.Calculation = xlManual 

With ActiveSheet 
    For i = 2 To 2000 
     If (.Range("D" & i).Value = 0 Or .Range("D" & i).Text = "#N/A") And _ 
      (.Range("E" & i).Value = 0 Or .Range("E" & i).Text = "#N/A") And _ 
      (.Range("F" & i).Value = 0 Or .Range("F" & i).Text = "#N/A") Then 
     .Range("D" & i).EntireRow.Hidden = True 
     End If 
    Next 
End With 

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

在你看到環For ... Next包括一些代碼的例子,因此該代碼會做,因爲你可以看到,1999年次2-2000計數所有內容均附於聲明中。原因是爲了使代碼更具可讀性,而不是重複ActiveSheet。如果你沒有使用它,而不是.Range,你將不得不編寫完整的東西(ActiveSheet.Range)。

+0

謝謝老兄....它的工作使用if ..End如果和之後對於...下一個和有...結束與 – 2015-03-25 05:17:08