当索引/匹配公式返回“N / A”时,我想隐藏B9-B40列中的行,现在我设法在表是静态时在VBA中完成它但是我有一个基于drop的动态表 - 向下选择表示每次下拉选择更改时返回的N / As数可能不同。
以下是我现在根据当前下拉选项隐藏N / A的行,我的下拉列表是C2,C3和C4。但事后考虑下降并未进一步改变。我对VBA不是很称职,所以任何帮助都会很棒。
感谢。
Option Explicit
Sub hide_if_error()
Dim MyCell As Range, Rng As Range
Set Rng = Range("B9:B40")
For Each MyCell In Rng
If IsError(MyCell) Then
MyCell.EntireRow.Hidden = True
End If
Next MyCell
End Sub
答案 0 :(得分:1)
你可以做到
Range("B9:B40").SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Hidden = True
您需要提前测试是否存在错误。
这可能看起来像:
Option Explicit
Public Sub hide_if_error()
With ThisWorkbook.Worksheets("Sheet4")
.Range("B9:B40").EntireRow.Hidden = False
If Evaluate("=SUM(IF(ISERROR(" & .Range("B9:B40").Address & "),1))") > 0 Then '<==check if any errors present
.Range("B9:B40").SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Hidden = True
End If
End With
End Sub
如有必要,您可以将上述内容链接到工作表更改或下拉更改事件,以便每次使用下拉列表进行更新时都会触发
例如:
如果数据验证位于C2:C4
,您可以在工作表的代码窗格中输入以下事件代码:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrHand
If Not Intersect(Target, Range("C2:C4")) Is Nothing Then
Application.EnableEvents = False
hide_if_error
End If
ErrHand:
Application.EnableEvents = True
End Sub
注意:
工作表事件代码位于与工作表4关联的代码窗格中:
其他代码进入标准模块(此处为模块1):
示例运行: