我写了一个VBA代码,当三个coloumn" d" ," E"和" F同时显示零值。如果它们中的任何一个具有非零值,则它不应该隐藏行。此外,我还想添加"#N / A"另外,就像#NA就像Zero一样,它应该隐藏行。
但似乎代码存在一些问题。请帮帮我。
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 :(得分:0)
欢迎来到网站!
您的语法不正确。循环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计数。所有内容都包含在With ActiveSheet ... End With
中声明。原因是使代码更具可读性,而不是重复ActiveSheet
。如果您没有使用它,则必须编写完整的内容(.Range
)而不是ActiveSheet.Range
。