|
toshi さん、おはようございます。
>1回目は線を書き2回目のクリックで線をけすには
>どのような修正が必要なのでしょうか?
今回の質問はボタンが複数ということだったので、直線がボタンと関連しているかどうかを楽に判定するために、線を引くときに名前をつけました。
Sub test()
Dim sh1 As Shape, sh2 As Shape, sh3 As Shape, ws As Worksheet
Set ws = Application.ActiveSheet
'
If TypeName(Application.Caller) = "String" Then
'クリックされた図形をセットします
Set sh1 = ws.Shapes(Application.Caller)
'
For Each sh2 In ws.Shapes
If sh2.Name = "Line_" & sh1.Name Then
Exit For
End If
Next
If sh2 Is Nothing Then
'その図形の位置を基準に線(終点↑)を引きます
With sh1
'AddLineの引数の意味はヘルプで見てね
Set sh3 = ws.Shapes.AddLine(.Left + .Width / 2, .Top, .Left + .Width / 2, .Top - .Height)
With sh3
.Line.EndArrowheadLength = msoArrowheadLong
.Line.EndArrowheadWidth = msoArrowheadWide
.Line.EndArrowheadStyle = msoArrowheadStealth
End With
'
sh3.Name = "Line_" & sh1.Name '関連する名前を付けたら判定が楽かなあ
End With
Else
sh2.Delete
End If
Else
MsgBox "Clickで呼んでいない" '直接実行するとエラーになるので除外
End If
'
Set sh1 = Nothing: Set sh2 = Nothing: Set sh3 = Nothing
Set ws = Nothing
End Sub
これでどうでしょう?
複数の線を引く→消す場合は、あるかないかを判定後、消去もループで処理します。
また、表示を切り替えるだけなら、削除ではなくVisibleで切り替える方がいいと思います。
|
|