当过滤后的表格列中所有单元格都不为空时,如何运行VBA代码?

时间:2019-06-27 20:45:58

标签: excel vba

当过滤的表列中的所有单元格都包含一个值时,我想运行VBA代码。我希望仅当列中的每个单元格都有一个值时,形状才可见,否则,我希望它保持隐藏状态。

我在Excel VBA中使用以下代码:

Sub Worksheet_Change(ByVal Target As Range)

Dim rng As Range
Set rng = Range("Table1[Verify]").SpecialCells(xlCellTypeVisible)

Dim i As Range

For Each i In rng.Cells
    If i.Value <> "" Then
        ActiveSheet.Shapes("Oval 6").Visible = True
    ElseIf i.Value = "" Then
        ActiveSheet.Shapes("Oval 6").Visible = False
    End If

Next i

End Sub

当列中的最后一个单元格为空白时,形状将隐藏,而当最后一个单元格具有值时,形状将可见。但是,如果所有其他单元格都为空白,而最后一个单元格不是,则形状仍然可见。

换句话说: 当所有xlCellTypeVisible单元格都不为空白时,我希望该形状可见;如果其中任何一个为空白,我希望将其隐藏。

1 个答案:

答案 0 :(得分:1)

可见性仅取决于最后一个单元格的原因是因为循环中没有退出。如果找到空白单元格,它仍然会查看下一个单元格,并根据下一个值隐藏或显示形状。

基本上,您想在碰到空白单元格时停止查看该行。

这意味着您需要使用Exit For语句:

ElseIf i.Value = "" Then
    ActiveSheet.Shapes("Oval 6").Visible = False
    Exit For
End If