我创建了一些标志进行组合,以便根据特定单元格的值隐藏和显示图形。
单元格为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
答案 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