为什么在选择单个时形状格式会更改为其他形状

Why Shape Format changes for other Shapes while selecting Single

我正在尝试创建一个函数来保持所有形状的颜色和形状格式,除了正在 selected 的单个形状。之后,如果我 select 其他,那么它应该使用与之前相同的颜色和格式进行转换。

但是我的函数会更改所有形状的颜色和格式。

我有这个格式。

当我 运行 该代码时,它会改变所有颜色。

我不知道如何实现这个,将不胜感激。

Sub Shape1()
Sheet1.Shapes("Group 16").ShapeStyle = msoShapeStylePreset41
Sheet1.Shapes("Freeform 17").ShapeStyle = msoShapeStylePreset27
Sheet1.Range("B5").Value = "January"
End Sub


Sub Shape2()
Sheet1.Shapes("Group 16").ShapeStyle = msoShapeStylePreset41
Sheet1.Shapes("Freeform 18").ShapeStyle = msoShapeStylePreset27
Sheet1.Range("B5").Value = "February"
End Sub

Sub Shape2()
Sheet1.Shapes("Group 16").ShapeStyle = msoShapeStylePreset41
Sheet1.Shapes("Freeform 19").ShapeStyle = msoShapeStylePreset27
Sheet1.Range("B5").Value = "March"
End Sub

使用 Application.Caller 你可以捕捉到被点击的形状,让你最小化你的代码。在此示例中,我重命名了选择窗格中的形状,如图所示。

Sub Months_ProcessShape()
    Dim callingShape As Variant
    Dim rCell As Range: Set rCell = Sheet1.Range("K5")      ' Month cell
    
    ' Calling shape
    callingShape = Application.Caller
    
    ' Set color
    Sheet1.Shapes("shGrp_Months").ShapeStyle = msoShapeStylePreset41
    Sheet1.Shapes(callingShape).ShapeStyle = msoShapeStylePreset27
    
    ' Write month in cell
    Select Case callingShape
        
        Case "shp_Jan"
            rCell.Value = "January"
            
        Case "shp_Feb"
            rCell.Value = "February"
            
        Case "shp_Mar"
            rCell.Value = "March"
            
        Case "shp_Apr"
            rCell.Value = "April"
            
        Case "shp_May"
            rCell.Value = "May"
    
    End Select
End Sub