高级过滤器在迭代时失败,运行-时间错误 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
在网上研究之后,我尝试了这个选项和它们的组合。我还尝试在迭代前激活 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
谢谢!
没有完全解决,但是找到了问题的"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) , 唯一:=真
我正在遍历列(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
在网上研究之后,我尝试了这个选项和它们的组合。我还尝试在迭代前激活 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
谢谢!
没有完全解决,但是找到了问题的"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) , 唯一:=真