高级过滤器在迭代时失败,运行-时间错误 1004

Advanced filter fails at iterations, run-time error 1004

我正在遍历列(B 到 E)并尝试从每一列获取唯一值到不同工作簿中的单元格。迭代只发生一次,不会重复(当 x=3 时),我得到 运行-time error 1004: application-defined or object-defined error

Dim LastCellRow As Integer
Dim inputRng As Range
Dim rng As Range

LastCellRow = Workbooks(MainFile).Sheets(1).Range("N3").End(xlDown).Row

For x=2 To 5
    wkbTemp.Worksheets("Specific").Range(Cells(2, x), Cells(2, x).End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:="", CopyToRange:=Workbooks(MainFile).Worksheets(1).Range("I4"), Unique:=True 

    Workbooks(MainFile).Sheets(1).Activate

    LastCell = Range("I5").End(xlDown).Address

    For Each rng In Range(Cells(5, 9), LastCell)
        If Cells(LastCellRow + 1, x + 12) = "" Then
            Cells(LastCellRow + 1, x + 12) = rng.Value
        Else
            Cells(LastCellRow + 1, x + 12) = Cells(LastCellRow + 1, x + 12) & "," & rng.Value
        End If
    Next
Next

在网上研究之后,我尝试了这个选项和它们的组合。我还尝试在迭代前激活 wkbTempMainFile,但没有成功。

With wkbTemp.Sheets("Specific")
        wkbTemp.Worksheets("Specific").Range(.Cells(2, x), .Cells(2, x).End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:="", CopyToRange:=Workbooks(MainFile).Worksheets(1).Range("I4"), Unique:=True
End With

谢谢!

没有完全解决,但是找到了问题的"why"。 ...CopyToRange:=Workbooks(MainFile).Worksheets(1).Range("I4") 不应一遍又一遍地复制到同一范围。我为每次迭代制作了一个新专栏,并且效果很好。也许在每次迭代后清除范围也可以;没试过。

我遇到了类似的问题,在使用 AdvancedFilter 方法并复制到不同范围时收到错误 1004。结果我复制到的范围在第一行有一个 header,所以在我的例子中可能是覆盖数据导致的。我从第一行删除了 header,vba 起作用了。然后我把 header 放回去,在没有 header 的情况下它工作了一次,并且相同的 VBA 代码与 header 一起工作。我的 CopyToRange 是一整列(H 列),因为我不知道需要多少行,因为我正在过滤唯一记录。

这是有效的(writeRow 是一个整数):

ThisWorkbook.Worksheets("Calculations").Range("D1:D" & writeRow).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=ThisWorkbook.Worksheets("Calculations") .Columns(8), Unique:=True

我还能够将 CopyToRange 更改为与高级过滤器的范围不同的 sheet,它也有效!

这里是复制到不同 sheet 的代码: ThisWorkbook.Worksheets("Calculations").Range("D1:D" & writeRow).AdvancedFilter 动作:=xlFilterCopy, CopyToRange:=ThisWorkbook.Worksheets("Sheet1").Columns(8) , 唯一:=真