0

我正在遍历列(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

在网上研究之后,我尝试了这个选项以及它们的组合。我还尝试在迭代之前激活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

谢谢!

4

2 回答 2

0

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

于 2015-07-13T00:59:53.127 回答
0

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

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

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

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

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

于 2017-08-16T05:27:49.213 回答