2017-08-03 8 views
1

forループで必要な実行時エラー91があります。forループにランタイムエラー91があります

Sub clearSheet(WSName As String) 

    Dim ws As Worksheet 
    Set ws = Nothing 

    With ActiveWorkbook 
     Dim blWSExists As Boolean 
     blWSExists = False 
     For i = 1 To .Sheets.Count 
      If .Sheets(i).Name = WSName Then 
       blWSExists = True 
       .Sheets(i).Activate 
       .Sheets(i).Visible = xlSheetVisible 
      End If 
     Next 
     If Not blWSExists Then 
      Set ws = .Sheets.Add 
      ws.Move after:=.Sheets(.Sheets.Count) 
      ws.Name = WSName 
      ws.Visible = xlSheetVisible 
     End If 
     .Sheets(WSName).AutoFilterMode = False 
     .Sheets(WSName).Cells.Clear 
     .Sheets(WSName).UsedRange.ClearOutline 
     .Sheets(WSName).Cells.ClearFormats 
    End With 

End Sub 
+0

tr最初に '.Sheets(i).Visible = xlSheetVisible'を表示させ、' .Sheets(i).Activate' –

+0

nopが動作しませんでした –

+2

多分それはしませんでしたが、とにかくそれらを切り替える必要があります。どのラインでこのエラーが発生していますか? –

答えて

0

それを試してみてください。

Dim ws As Worksheet 
Dim blWSExists As Boolean 

blWSExists = False 

For Each ws In Worksheets 
    If ws.Name = WSName Then 
     blWSExists = True 
    End If 
Next 

If Not blWSExists Then 
    ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count) 
    ActiveSheet.Name = WSName 
End If 

Set ws = ActiveWorkbook.Sheets(WSName) 

ws.AutoFilterMode = False 
ws.Cells.Clear 
ws.UsedRange.ClearOutline 
ws.Cells.ClearFormats 
ws.Activate 
+0

この行にランタイムエラー1004があります:(" For Each ws in Worksheets " –

+0

@HA Forループの前に' Set ws = Nothing'を入れてみてくださいこのエラーはここでは発生していません。 –

0

あなたはワークシート上のすべてをクリアするためにCells.Delete()を使用することができます。

Sub clearSheet(WSName As String) 

    Dim s As Object 

    For Each s in ThisWorkbook.Sheets 
     If s.Name = WSName Then 
      s.Visible = xlSheetVisible 
      If TypeOf s Is worksheet Then s.Cells.Delete ' not all Sheets have cells, but all Worksheets do 
      Exit Sub          ' to ignore the rest of the code if the Sheet exists 
     End If 
    Next 

    ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)).Name = WSName 

End Sub 

またはちょうどに関連した絶対にすべてをクリアするためにシートを削除し、新しいを追加シート:

Sub clearSheet(WSName As String) 
    On Error Resume Next 
    Sheets(WSName).Delete 
    Sheets.Add(After:=Sheets(Sheets.Count)).Name = WSName 
End Sub 
関連する問題