2016-10-23 6 views
1

ワークシートを見て、特定の名前のシートを見つけて削除したい場合は、そのシートを削除してから、既存のすべてのシートの後にシートを作成したい次のようにその名前で、私のコードは次のとおりです。シートが存在する場合は削除して新しいシートを作成する

For Each ws In Worksheets 
    If ws.Name = "asdf" Then 
     Application.DisplayAlerts = False 
     Sheets("asdf").Delete 
     Application.DisplayAlerts = True 
     End 
    End If 
Next 

Sheets.Add(After:=Sheets(Sheets.count)).Name = "asdf" 

私はそれがしたいように、これは動作しません。しかし、シートがすでに存在する場合、それは、コードの1回の実行でこれらの操作の両方を行うことはありませんそれは単にシートを削除し、私はそれを実行する必要があるように新しいものを作成しないで、私はそれを新しいものを作成するために実行する必要があります、なぜこれが、どのように私はそれを修正するつもりですか?

答えて

3

Endステートメントを削除すると、ワークシートasdfを見つけて削除した後にコードが終了します。

Function GetWorksheet(shtName As String) As Worksheet 
    On Error Resume Next 
    Set GetWorksheet = Worksheets(shtName) 
End Function 

、あなたはあなたのメインでそれを活用することができます。代わりにしようとし、それを

次の関数を取得することにより、あなたはそれでアイテムの存在をテストすることができWorksheetsコレクションをループの

5

はそれをしませんコードとして、次のとおりです。

If Not GetWorksheet("asdf") Is Nothing Then 
    Application.DisplayAlerts = False 
    Worksheets("asdf").Delete 
    Application.DisplayAlerts = True 
End If 
Worksheets.Add(After:=sheets(sheets.Count)).name = "asdf" 

が、最も簡単な方法はしようと、それはに包まれ、削除されるだろう- On Error GoTo 0 "ブロック":

Application.DisplayAlerts = False 
    On Error Resume Next 
    Worksheets("asdf").Delete 
    On Error GoTo 0 
    Application.DisplayAlerts = True 
    Worksheets.Add(After:=sheets(sheets.Count)).name = "asdf" 
関連する問題