win7、office2007です。
列の最後尾にボタンを一つ配置しています。キャプション「追加」となっています。
ボタンをクリックすると、その行丸ごとコピーしてすぐ下にペーストします。その際、ボタンもコピーしますが、キャプションを「削除」にします。
「削除」ボタンをクリックするとそのボタンのある行全体が削除され、その下の行が上に詰めてくれます。
という動きを考えています。
以下のようなプログラムを考えてみたところ、
目的の行全体は削除され、下の行が詰めてくれるのですが、ボタンが消え図に残っています。詰めてきた下の行に食い込んでる状態。
奇妙なのは、デバッグモードで1行づつ動かしていると、ボタンが消えてくれる場合がある、ということ。
でもできない場合もあり、普通に実行すると消えません。ステップインを一つ一つ時間をかけるとうまくいくような気が....(^_^;)
わたしにはわけがわからないのですが、解決になにかヒントをいただけるとありがたいです。
(ボタンはリボン>開発>コントロール>挿入>フォームコントロールの左上のボタンです)
よろしくお願いします。
Sub AddList()
Dim oBTN As Button
Set oBTN = ActiveSheet.Buttons(Application.Caller)
'vBTN = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row 'フォームボタンの置かれているアドレスを取得
vBTN = oBTN.TopLeftCell.Row 'フォームボタンの置かれているアドレスを取得
If oBTN.Caption = "素材削除" Then
oBTN.Delete ←効きません
'oBTN.Select ←delete でうまくいかないのでセレクトしてカットしてみましたが同じでした。
'Selection.Cut
Rows(vBTN).Delete ←行削除は成功します。
Else: Call Tuika(oBTN, vBTN) ←追加は下に続きます
End If
end Sub
Private Sub Tuika(ByVal oBTN As Button, ByVal vBTN As Variant)
oBTN.Caption = "削除" ←最初に削除とつけておきます
Rows(vBTN).Copy ’行全体をコピー
Cells(vBTN + 1, 1).EntireRow.Insert '行全体を下にシフト
Rows(vBTN).Copy Destination:=Rows(vBTN + 1) '行の挿入
If vBTN = 10 Then 'ボタン名を「削除」に。'もし一番上(10)なら「追加」に。
oBTN.Caption = "追加"
Else: oBTN.Caption = "削除"
End If
End Sub