エクセルVBAでもっとすっきりさせたい
エクセル2000です。
ワークシート上にオートシェープの楕円を5個配置してあります。
それぞれ名前をOval_1~Oval_5と設定しました。
それぞれは以下のマクロを組み込み、クリックにより破線、実線と変更します。実線が選択されたしるしとします。
Oval_1~Oval_3で1グループ、Oval_4~Oval_5で1グループとし、それぞれのグループ内で1個の楕円しか選べないようにしたいのです。
一応、希望通りの動きはするのですが、何かすっきりしません。
もっと気の利いたコードはないでしょうか?
Sub Oval_Check()
With ActiveSheet
If .Shapes(Application.Caller).Line.DashStyle = msoLineSolid Then 'クリックしたのが実線なら
.Shapes(Application.Caller).Line.DashStyle = msoLineSquareDot ' 破線に
Select Case Application.Caller 'クリックしたのが
Case "Oval_4" 'Oval_4なら
.Shapes("Oval_5").Line.DashStyle = msoLineSolid 'Oval_5を実線に
Case "Oval_5" 'Oval_5なら
.Shapes("Oval_4").Line.DashStyle = msoLineSolid 'Oval_4を実線に
End Select
Else 'そうでないなら
.Shapes(Application.Caller).Line.DashStyle = msoLineSolid ' 実線に
Select Case Application.Caller 'クリックしたのが
Case "Oval_1" 'Oval_1なら
.Shapes.Range(Array("Oval_2", "Oval_3")).Line.DashStyle = msoLineSquareDot 'Oval_2,Oval_3を破線に
Case "Oval_2" 'Oval_2なら
.Shapes.Range(Array("Oval_1", "Oval_3")).Line.DashStyle = msoLineSquareDot 'Oval_1,Oval_3を破線に
Case "Oval_3" 'Oval_3なら
.Shapes.Range(Array("Oval_1", "Oval_2")).Line.DashStyle = msoLineSquareDot 'Oval_1,Oval_2を破線に
Case "Oval_4" 'Oval_4なら
.Shapes("Oval_5").Line.DashStyle = msoLineSquareDot 'Oval_5を破線に
Case "Oval_5" 'Oval_5なら
.Shapes("Oval_4").Line.DashStyle = msoLineSquareDot 'Oval_4を破線に
End Select
End If
End With
End Sub