Excel 自动筛选不一致:范围类的方法失败

Excel 自动筛选不一致:范围类的方法失败,excel,autofilter,vba,Excel,Autofilter,Vba,下面的循环在一个数据集上像一个符咒一样工作,但在另一个具有相同字段的数据集上它不工作,并给我一个错误。我束手无策。任何调试指导都将不胜感激 For Each Itm In Array("SCL_FL", "FSL_SCL_FX") Workbooks(Original_Name).Sheets("Sheet1").Select Selection.Copy Workbooks.Add

下面的循环在一个数据集上像一个符咒一样工作,但在另一个具有相同字段的数据集上它不工作,并给我一个错误。我束手无策。任何调试指导都将不胜感激

For Each Itm In Array("SCL_FL", "FSL_SCL_FX")
                Workbooks(Original_Name).Sheets("Sheet1").Select
                Selection.Copy
                Workbooks.Add
                ActiveSheet.Name = Itm
                Sheets(Itm).Paste
                    If Itm = "SCL_FL" Then
                        Worksheets(Itm).UsedRange.AutoFilter Field:=3, Criteria1:="=SCL_FL"
                    Else
                        Worksheets(Itm).UsedRange.AutoFilter Field:=3, Criteria1:=Array("FSL", "SCL_FX"), Operator:=xlFilterValues
                    End If

Next Itm
我收到错误“range类的自动筛选方法失败”

当我这样做的时候,我也会犯同样的错误

Worksheets(Itm).UsedRange.AutoFilter Field:=3, Criteria1:="SCL_FL", Operator:=xlFilterValues

为什么这一行处理一个数据而不处理另一个数据?这两个数据实际上是相同的。只需复制并粘贴到具有不同文件名的不同文件中。

由于在
Sheet1.Copy
命令后添加工作簿,因此出现该错误。“复制”命令已创建新工作簿。如果在此之后再次添加新工作簿,
usedrange
自然会为您提供上述注释中提到的
$a$1

将您的代码更改为此,它将工作

Sub Run1Nov24()
    '
    '~~>Rest of your code
    '
    Dim itm
    Dim wb As Workbook
    Dim ws As Worksheet

    For Each itm In Array("SCL_FL", "FSL_SCL_FX")
        Set wb = Workbooks.Add

        Workbooks(Original_Name).Sheets("Sheet1").Copy Before:=wb.Sheets(1)

        Set ws = wb.Sheets(1)

        With ws
            .AutoFilterMode = False
            .Name = itm
            If itm = "SCL_FL" Then
                .UsedRange.AutoFilter Field:=3, Criteria1:="=SCL_FL"
            Else
                .UsedRange.AutoFilter Field:=3, Criteria1:=Array("FSL", "SCL_FX"), Operator:=xlFilterValues
            End If
         End With
      Next itm
    '
    '~~>Rest of your code
    '
End Sub

出现此错误是因为您在
Sheet1.Copy
命令后添加工作簿。“复制”命令已创建新工作簿。如果在此之后再次添加新工作簿,
usedrange
自然会为您提供上述注释中提到的
$a$1

将您的代码更改为此,它将工作

Sub Run1Nov24()
    '
    '~~>Rest of your code
    '
    Dim itm
    Dim wb As Workbook
    Dim ws As Worksheet

    For Each itm In Array("SCL_FL", "FSL_SCL_FX")
        Set wb = Workbooks.Add

        Workbooks(Original_Name).Sheets("Sheet1").Copy Before:=wb.Sheets(1)

        Set ws = wb.Sheets(1)

        With ws
            .AutoFilterMode = False
            .Name = itm
            If itm = "SCL_FL" Then
                .UsedRange.AutoFilter Field:=3, Criteria1:="=SCL_FL"
            Else
                .UsedRange.AutoFilter Field:=3, Criteria1:=Array("FSL", "SCL_FX"), Operator:=xlFilterValues
            End If
         End With
      Next itm
    '
    '~~>Rest of your code
    '
End Sub

您能否调试并检查出错时
debug.Print Worksheets(Itm).UsedRange.Address
的值是多少?出错时
Itm
的值也是多少。@SiddharthRout Itm=“SCL_FL”。我不知道如何进行调试。打印。。我应该在循环中添加该行吗?是的。在
工作表(itm)之后添加
Debug.print itm
。粘贴
Debug.print工作表(itm)。使用drange.Address
两次。在
IF
Else
@SiddharthRout中,我做了ctrlG,下面的框显示SCL\u FL$A$1您可以调试并检查
debug.Print Worksheets(Itm)的值是多少。出错时使用drange.Address
?出错时
Itm
的值也是多少。@SiddharthRout Itm=“SCL\u FL”。我不知道如何进行调试。打印。。我应该在循环中添加该行吗?是的。在
工作表(itm)之后添加
Debug.print itm
。粘贴
Debug.print工作表(itm)。使用drange.Address
两次。在
IF
Else
@SiddharthRout中,我做了ctrlG,下面的框中写着SCL_FL$A$1帮助:)很高兴帮助:)