我正在遍历列(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
谢谢!
答案 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),唯一:=真