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

时间:2015-07-10 12:47:09

标签: excel vba filter iteration challenge-response

我正在遍历列(B到E)并尝试从每列获取唯一值到不同工作簿中的单元格。迭代只发生一次,不重复(当x = 3时),我得到运行时错误1004:应用程序定义或对象定义错误

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

在线研究后,我尝试了这个选项以及它们的组合。我还尝试在迭代前激活 wkbTemp MainFile ,但没有运气。

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

谢谢!

2 个答案:

答案 0 :(得分:0)

没有完全解决但是找到了"为什么"这个问题。 ...CopyToRange:=Workbooks(MainFile).Worksheets(1).Range("I4") 不应该一遍又一遍地复制到相同的范围。我为每次迭代创建了一个新列,它完美地完成了。也许在每次迭代后清除范围也会起作用;没试过。

答案 1 :(得分:0)

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

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

ThisWorkbook.Worksheets(" Calculations")。范​​围(" D1:D"& writeRow).AdvancedFilter动作:= xlFilterCopy,CopyToRange:= ThisWorkbook.Worksheets(&#34 ;计算")。列(8),唯一:=真

我还可以将CopyToRange更改为与高级过滤器范围不同的工作表,它也可以工作!

以下是复制到其他工作表的代码: ThisWorkbook.Worksheets(" Calculations")。范​​围(" D1:D"& writeRow).AdvancedFilter动作:= xlFilterCopy,CopyToRange:= ThisWorkbook.Worksheets(" Sheet1&# 34;)。列(8),唯一:=真