• ベストアンサー

VBA シートの削除について

VBAのコードの書き方について質問があります。 コマンドボタンをクリックした時、シート1~シート4を削除をしたいのですが、 シート1~シート4が存在するかはその時の状況で異なります。 シート1が存在し、シート2~4が存在しないのであればシート1だけ削除する場合もあれば シート1~シート4がすべて無い場合もあります。 いずれのケースにしてもボタンクリック後は”シートを削除しました”のメッセージを 表示させたいのですが、どうコードを書けばよいでしょうか? VBA初心者なのでコードを教えていただけると助かります。 よろしくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.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

bz0715
質問者

お礼

シートとブックの保護を解除したらできました! ありがとうございます!

bz0715
質問者

補足

前提条件はその通りです! 教えていただいた通り実行してみましたが、 WorkSheets(k).Delete の部分で「WorkSheetクラスのDeleteメソッドが失敗しました」 となってしまいます(涙) 何がいけないでしょうか??

関連するQ&A