Excel for循环上存在运行时错误91

Excel for循环上存在运行时错误91,excel,vba,Excel,Vba,循环中出现运行时错误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 =

循环中出现运行时错误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
试试看:

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
试试看:

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

您可以使用
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

您可以使用
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

尝试颠倒两行的顺序,首先使其可见
.Sheets(i).visible=xlSheetVisible
,然后将其激活
.Sheets(i).激活
nop不起作用可能不起作用,但您仍然需要切换它们。在哪一行出现此错误?您尝试设置ws两次。删除第二个
集合
,然后使用Active工作簿的
没有指向您认为它指向的地方。尝试颠倒两行的顺序,首先使其可见
.Sheets(i).visible=xlSheetVisible
然后激活它
.Sheets(i)。激活
否可能不起作用,但无论如何,你都需要切换它们。在哪一行出现此错误?您尝试设置ws两次。删除第二个
,则使用ActiveWorkbook
未指向您认为它指向的位置。此行存在运行时错误1004:(“对于工作表中的每个ws”@H.A请尝试将
集ws=Nothing
放在For循环之前。此处未发生此错误。此行存在运行时错误1004:(“对于工作表中的每个ws”@H.A在For循环之前尝试放置
Set ws=Nothing
。此处不发生此错误。