首页 > 解决方案 > 当过滤表列中的单元格都不是空白时,如何运行 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 单元格都为非空白时形状可见,并且如果其中任何一个为空白,我希望将其隐藏。

标签: excelvba

解决方案


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

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

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

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

推荐阅读