- ベストアンサー
VBA シートの削除について
VBAのコードの書き方について質問があります。 コマンドボタンをクリックした時、シート1~シート4を削除をしたいのですが、 シート1~シート4が存在するかはその時の状況で異なります。 シート1が存在し、シート2~4が存在しないのであればシート1だけ削除する場合もあれば シート1~シート4がすべて無い場合もあります。 いずれのケースにしてもボタンクリック後は”シートを削除しました”のメッセージを 表示させたいのですが、どうコードを書けばよいでしょうか? VBA初心者なのでコードを教えていただけると助かります。 よろしくお願いします!
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは! >シート1~シート4を削除・・・ とありますが、これらはSheet名だという前提での一例です。 コマンドボタンを配置しているSheet名は削除するSheet名になっていない!とします。 Private Sub CommandButton1_Click() Dim i As Long, k As Long Dim str As String, buf As String, myArray As Variant myArray = Array("シート1", "シート2", "シート3", "シート4") For i = 0 To 3 str = myArray(i) For k = Worksheets.Count To 1 Step -1 If Worksheets(k).Name = str Then buf = buf & str & "," Application.DisplayAlerts = False Worksheets(k).Delete End If Next k Next i If Len(buf) <> 0 Then MsgBox Left(buf, Len(buf) - 1) & vbCrLf & "を削除しました。" Else MsgBox "削除できるシートはありません。" End If End Sub ※ 仮にコマンドボタンを配置しているSheet名が削除するSheet名になっていると コマンドボタンも一緒に削除してしまうコトになりますので、一度だけ実行できるコマンドボタンになってしまいます。 ※ Sheet名部「シート1」等の数値は半角にしていますので、削除したいSheet名に適宜合わせてください。 参考になりますかね?m(_ _)m
お礼
シートとブックの保護を解除したらできました! ありがとうございます!
補足
前提条件はその通りです! 教えていただいた通り実行してみましたが、 WorkSheets(k).Delete の部分で「WorkSheetクラスのDeleteメソッドが失敗しました」 となってしまいます(涙) 何がいけないでしょうか??