マクロで使用済みのボタンを削除したいと考えています。
毎回ボタンの数が同じ場合は作れたのですが、
ボタンの数が場合によって異なります。
具体的にはD5セルより下にあるボタンを削除したいと考えています。
ボタンを作る時のマクロは
Set ws1 = Workbooks("ブックA").Worksheets("Sheet1")
Set ws2 = Workbooks("ブックB").Worksheets("Sheet1")
i = 2
j = 5
Do Until ws1.Range("B" & i) = ""
ws2.Range("D" & j).Value = ws1.Range("B" & i).Value
With ActiveSheet.Buttons.Add(Cells(j, 4).Left + 1, Cells(j, 4).Top + 1, _
Cells(j, 4).Width - 1, Cells(j, 4).Height - 1)
.Name = "いの" & i - 1
.OnAction = "Select"
.Characters.Text = Range("D" & j)
End With
i = i + 1
j = j + 1
Loop
といった感じで、ブックAのB列のデータ数だけ、
ブックBのD5から下に値をコピーし、
その上にセルサイズに合わせてボタンを作り、
Nameを上から順に「いの1」「いの2」・・・、表示はボタンの裏に隠れている値をつけ、
ボタンにマクロ「あいうえお」を登録します。
次にボタンをクリックしたときに、
上の工程で作られたボタンを削除したいと考えています。
a = 1
Do Until ActiveSheet.Shapes("Order" & a) = ""
ActiveSheet.Shapes("Order" & a).Delete
a = a + 1
Loop
b = 5
Do Until Range("D" & b) = ""
Range("D" & b).ClearContents
b = b + 1
Loop
Call あいうえお
End Sub
ボタン裏のセルは削除できたのですが、
肝心のボタンの削除は出来ませんでした。
どなたかご教授していただければ大変助かります。
宜しくお願いします。
No.5ベストアンサー
- 回答日時:
いのXX番を総じて削り落としてしまって良いなら
dim s as shape
for each s in activesheet.shapes
if s.name like "いの*" then
s.delete
end if
next
と言った具合です。
#そのためにわざわざボタン追加時に名前を付けるようにしておいたのですから。
回答ありがとうございます。
仰るとおり削除するために連番で名前を付けました。
タッチの差で完成してしまいましたが、
そちらの方が汎用性があってよさそうです。
Eachは使った事も無く発想出来ませんでした。
ありがとうございました!
No.4
- 回答日時:
セルの数にあわせてボタンを動的に作成する数を決めたいのか。
であればフォームのInicializeイベント(この場合はブックのオープンイベント?)にボタンをADDする回数を
d=sh1.Range("A64436").End(xlUp).Rowのようにとって必要ボタンの数を計算する。使うセルが1行おきなら、それなりに数の計算をする。
その数だけFor NextでAddを繰り返せば良いのでは?
質問の表現がくどくて、誤って解しているかもしれない。
質問者は、文章ですっきり内容を表現する訓練、セルとコントロールの状態を図示する勉強もしてください。
====
話は関連して
ワークシートにコマンドボタンを複数貼り付けてあるとして、貼り付けたCommndButton1(最初に貼り付けた場合)だけを
削除するのは
Sub test01()
'Worksheets("Sheet1").CommandButton1.Visible = True
Worksheets("Sheet1").Shapes.Item(1).Delete
End Sub
で削除できるようだ。
別に、削除せず、Visible=Falseにしておく手もあろうかと思う。
回答とご指摘ありがとうございます。
すっきりさせ過ぎると情報が足りないし。。。と思いくどくなってしまったようです。
表示/非表示に関しましてはNo2さんのお礼に書いたとおりで、
ボタンがいくつ必要になるか分かりません。
後に下に関連情報をコピーする工程になりますので
邪魔になってしまいます。
ありがとうございました。
No.3
- 回答日時:
「コマンドボタン 削除」で検索したら、出てきました。
アクティブ・シートにある複数のコマンドボタンを見付けて、削除してくます。
Dim obj As OLEObject
For Each obj In ActiveSheet.OLEObjects
If TypeOf obj.Object Is MSForms.CommandButton Then
obj.Delete
End If
Next
参考URL:http://www.excel.studio-kazu.jp/kw/2009031810485 …
回答ありがとうございます。
そのページは以前見ましたが、
アクティブシート上にあるコマンドボタンを全て一気に削除するようです。
同じシートには削除したくないボタンもありますので今回は使えませんでした。
ですが、編集中は今も使っています。
ありがとうございました。
No.2
- 回答日時:
>次にボタンをクリックしたときに、
>上の工程で作られたボタンを削除したい
ここで言ってる「ボタンをクリックしたときに」とは,
1)「ボタン全部削除ボタン」が別にあるのをクリックすると,ボタンを一斉に削除したい,なのか
2)最初のマクロでずらり並べたボタンからどれか1個クリックすると,そのクリックしたボタンを消していく,なのか
どういう状況ですか。
ご相談分後半で掲示されたマクロの動作を追ってみると,どうやら1)のようにも思えますが,それならばactivesheet.shapes("いの"xx番)を順番にdeleteしていけばOKです。
この回答への補足
お蔭様で無事に解決しました!
ポカミスばかりでてこずりましたが、
以下のコードがで問題なさそうです。
Dim a As Long
For a = 1 To Range("D" & Rows.Count).End(xlUp).row - 4 ActiveSheet.Shapes("Order" & a).Cut
Next
回答いただいた皆様ありがとうございました!
回答ありがとうございます。
イメージ的には1)と2)を合せたものです。
クリックするとマクロでD列の5行目から下に並んだボタンを一斉に削除する感じです。
ですが、何かヒントをもらった気がします。
ありがとうございました。
No.1
- 回答日時:
通常ボタンは、「削除するのではなく、表示しないようにする」「作るのではなく、非表示のものを表示させるようにする」というやり方で動作させる・・・と思うんですが。
ちなみに非表示のボタンは押せなかった筈です。で、表示/非表示ですが、.Visible = True / False というだけの話だった筈です。
動作チェックして無いので、その辺はお許しを。
この回答への補足
質問欄に間違いがありました。
この場をお借りして訂正いたします。
質問欄の上のコードでは、
「.OnAction = "Select"」
と、書いていますが、中盤に
「ボタンにマクロ「あいうえお」を登録します。」
とあります。
正確には
「ボタンにマクロ「Select」を登録します。」
です。
宜しくお願いいたします。
回答ありがとうございます。
今回の場合は、ボタンが何個必要になるか解らないため、
作るようにしています。
2個の場合もあれば、10個、20個必要な場合も考えられます。
今試しているものは12個必要です。
しかし、他の場所では使えるかもしれません。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) ※初心者です マクロVBAについて 3 2022/11/05 12:53
- Visual Basic(VBA) エクセルVBA 3 2022/06/23 20:00
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数シートのボタンに同一の動...
-
Excelシート上のマクロを登録し...
-
ユーザーフォームをショートカ...
-
Excel ラジオボタンのリセット...
-
Accessのフォームでタブの色
-
フレーム内のオプションボタン...
-
入力済み、選択したセルに連動...
-
HPの画像の更新
-
VBA 図の削除
-
エクセルの画面にユーザーフォ...
-
2重フィルター
-
日報の休日ボタン(トグルボタ...
-
Excel ボタンが小さくなる
-
UPS警告音を止めたい
-
Word2000: 文字列の一部の背景...
-
【Excel VBA】マクロボタンを表...
-
excel 2000でのマクロボタン作成で
-
もしかして
-
エクセルで、日付を入力すると...
-
「ご処理進めて頂きますようお...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
エクセルの画面にユーザーフォ...
-
UPS警告音を止めたい
-
複数シートのボタンに同一の動...
-
ユーザーフォームをショートカ...
-
Excelで、ボタンにコメントをつ...
-
マクロで作ったボタンのサイズ...
-
フォームコントロールから作っ...
-
Excel ラジオボタンのリセット...
-
【Excel VBA】マクロボタンを表...
-
excel スクロールしても常にボ...
-
エクセルで、オプションボタン...
-
EXCELの塗りつぶしのボタ...
-
EXCELのマクロが 実行時エラー5...
-
Accessのフォームでタブの色
-
マクロ初心者です。 msgboxのre...
-
入力済み、選択したセルに連動...
-
Access VBAでボタンの背景色を...
-
エクセルでマクロボタンを押す...
-
エクセルVBA フォームへ動...
おすすめ情報