隐藏/显示基于特定单元格的多个对象

时间:2020-05-11 14:50:38

标签: arrays excel vba

我创建了一些标志进行组合,以便根据特定单元格的值隐藏和显示图形。

单元格为U47,我需要根据可能的组合显示的图形为:

11、21、31->图形PreSeg

12、22、32->图形PosSeg

41->图形PreTot

42->图形PosTot

我尝试了下面的代码,图形PreTot和PosTot正常工作,但是当我单击按钮将标志更改为11、21、31、12、22或32时,图形PreSeg和PosSeg将不会显示。

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False

If UCase(ActiveSheet.Cells(47, 21)) = "41" Then
    ActiveSheet.Shapes.Range(Array("PreTot")).Visible = True
Else
    ActiveSheet.Shapes.Range(Array("PreTot")).Visible = False
End If
            
If UCase(ActiveSheet.Cells(47, 21)) = "42" Then
    ActiveSheet.Shapes.Range(Array("PosTot")).Visible = True
Else
    ActiveSheet.Shapes.Range(Array("PosTot")).Visible = False
End If

If UCase(ActiveSheet.Cells(47, 21)) = "11" Then
    ActiveSheet.Shapes.Range(Array("PreSeg")).Visible = True
Else
    ActiveSheet.Shapes.Range(Array("PreSeg")).Visible = False
End If

If UCase(ActiveSheet.Cells(47, 21)) = "21" Then
    ActiveSheet.Shapes.Range(Array("PreSeg")).Visible = True
Else
    ActiveSheet.Shapes.Range(Array("PreSeg")).Visible = False
End If

If UCase(ActiveSheet.Cells(47, 21)) = "31" Then
    ActiveSheet.Shapes.Range(Array("PreSeg")).Visible = True
Else
    ActiveSheet.Shapes.Range(Array("PreSeg")).Visible = False
End If

If UCase(ActiveSheet.Cells(47, 21)) = "12" Then
    ActiveSheet.Shapes.Range(Array("PosSeg")).Visible = True
Else
    ActiveSheet.Shapes.Range(Array("PosSeg")).Visible = False
End If

If UCase(ActiveSheet.Cells(47, 21)) = "22" Then
    ActiveSheet.Shapes.Range(Array("PosSeg")).Visible = True
Else
    ActiveSheet.Shapes.Range(Array("PosSeg")).Visible = False
End If

If UCase(ActiveSheet.Cells(47, 21)) = "32" Then
    ActiveSheet.Shapes.Range(Array("PosSeg")).Visible = True
Else
    ActiveSheet.Shapes.Range(Array("PosSeg")).Visible = False
End If

End Sub

1 个答案:

答案 0 :(得分:2)

尝试此代码:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$U$47" Then

        'Hide all shapes first. May need to add condition if
        'some shapes shouldn't be hidden.
        Dim shp As Shape
        For Each shp In ActiveSheet.Shapes
            shp.Visible = False
        Next shp

        Select Case Target.Value
        'Select Case ActiveSheet.Cells(47, 21).Value
            Case 41
                ActiveSheet.Shapes("PreTot").Visible = True
            Case 42
                ActiveSheet.Shapes("PosTot").Visible = True
            Case 11, 21, 31
                ActiveSheet.Shapes("PreSeg").Visible = True
            Case 12, 22, 32
                ActiveSheet.Shapes("PosSeg").Visible = True
        End Select
    End If

End Sub
相关问题