アプリ版:「スタンプのみでお礼する」機能のリリースについて

シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください!

Sub 不要シート削除()
Dim WS As Worksheet
Dim Target As String
Target = "利用表"
For Each WS In Worksheets
If InStr(WS.Name, Target) <> 1 Then
     WS.Activate
Application.DisplayAlerts = False
WS.Delete
Application.DisplayAlerts = True
End If
Next WS
End Sub

質問者からの補足コメント

  • Target = "利用表"としていますがシート名には類似した“利用表6月”などが含まれていました。
    これを踏まえてTargetに利用表が含まれると変更したいのですがどのように変更したら良いでしょうか。助けてください。

      補足日時:2022/09/08 18:19
  • シート名が
    利用表    ・・・・①
    利用表6月  ・・・・②
    6月利用表  ・・・・③
    以外のシートを全て削除したいのですが助けてください。

      補足日時:2022/09/09 11:00

A 回答 (6件)

シート名が


利用表    ・・・・①
利用表6月  ・・・・②
6月利用表  ・・・・③
の場合、
①②③を削除したいなら
If InStr(WS.Name, Target) <> 0 Then
になります。

①②のみ削除したいなら
If InStr(WS.Name, Target) = 1 Then
になります。
    • good
    • 1
この回答へのお礼

ありがとうございます。

利用表    ・・・・①
利用表6月  ・・・・②
6月利用表  ・・・・③
以外のシートを全て削除したいのですが助けてください。

お礼日時:2022/09/09 10:59

>シート削除のマクロで「deleteメソッドは失敗しました」となります。

助けてください!

最後の1シートを削除しようとすると、必ずこのエラーが発生します。
削除する場合には、必ず、削除対象外のシートを1枚以上残した状態で
、削除するようにしてください。
    • good
    • 0

>シート名が


>利用表    ・・・・①
>利用表6月  ・・・・②
>6月利用表  ・・・・③
>以外のシートを全て削除したいのですが助けてください。

それなら
If InStr(WS.Name, Target) = 0 Then

でOKのはずです。(こちらで動作確認は行っていません)
    • good
    • 0
この回答へのお礼

ありがとうございます♪

お礼日時:2022/09/09 20:02

If InStr(WS.Name, Target) <> 1 Then


ではなく
If InStr(WS.Name, Target) <> 0 Then
ではないでしょうか。
    • good
    • 1

後ろから削除するようにしてみては。


https://stackoverflow.com/questions/20220661/del …
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2022/09/08 18:15

こんにちは



状況が不明なので、推測だけになりますが・・

・ブック内の唯一のシートを削除しようとして失敗している
あるいは
・ブックに保護が掛かっている状態で実行しようとしている
などということはありませんか?
    • good
    • 1
この回答へのお礼

ありがとうございます。確認してみます。

お礼日時:2022/09/08 18:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!