Excel 运行时错误';1004';应用程序定义或对象定义错误';

Excel 运行时错误';1004';应用程序定义或对象定义错误';,excel,vba,Excel,Vba,我有一个宏,可以帮助我将多对多关系转换为多对一关系 例如,如果我有一个SKU,并且该SKU附加了一个到某个国家的订单,然后是同一个国家/SKU组合的重复出现,我想创建一个只包含SKU的逐行表,然后,在相邻的单元格中,以逗号分隔的列表列出了已销售的所有国家/地区的值。我在这方面遇到运行时应用程序错误。我不知道为什么 有空的时候,有人能帮我看看这个吗 我添加了两个星号和错误,指示错误发生的位置 Sub SteveOranjin() Dim Cl As Range '''This is

我有一个宏,可以帮助我将多对多关系转换为多对一关系

例如,如果我有一个
SKU
,并且该
SKU
附加了一个到某个国家的订单,然后是同一个
国家/SKU
组合的重复出现,我想创建一个只包含
SKU
的逐行表,然后,在相邻的单元格中,以逗号分隔的列表列出了已销售的所有国家/地区的值。我在这方面遇到运行时应用程序错误。我不知道为什么

有空的时候,有人能帮我看看这个吗

我添加了两个星号和错误,指示错误发生的位置

Sub SteveOranjin()
    Dim Cl As Range
    '''This is all in VBA for EXCEL:
    With CreateObject("scripting.dictionary")
        For Each Cl In Range("A2", Range("A" & Rows.Count).End(xlUp))
            If Not .exists(Cl.Value) Then
                .Add Cl.Value, Cl.Offset(, 1).Value
            Else
                .Item(Cl.Value) = .Item(Cl.Value) & ", " & Cl.Offset(, 1).Value
            End If
        Next Cl
        Range("F2").Resize(.Count, 2).Value = Application.Transpose(Array(.keys, .items))  ' ***[error here.]***
    End With
End Sub

这就是你想要的吗

Option Explicit

Sub SteveOranjin()
    Dim ws As Worksheet
    Dim lRow As Long, i As Long
    Dim dict As Object
    Dim arKey, arItm, arFinal

    Set ws = Sheet1 '<~~ Change this to the relevant sheet   
    Set dict = CreateObject("scripting.dictionary")

    With ws
        .Columns("A:B").RemoveDuplicates Columns:=Array(1, 2)

        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        For i = 2 To lRow
            If Not dict.exists(.Range("A" & i).Value) Then
                dict.Add .Range("A" & i).Value, .Range("B" & i).Value
            Else
                dict.Item(.Range("A" & i).Value) = dict.Item(.Range("A" & i).Value) & _
                                                   ", " & .Range("B" & i).Value
            End If
        Next i
    End With

    arKey = dict.Keys: arItm = dict.Items

    ReDim arFinal(LBound(arKey) To UBound(arKey), 0 To 1)

    For i = LBound(arKey) To UBound(arKey)
        arFinal(i, 0) = arKey(i): arFinal(i, 1) = arItm(i)
    Next i

    Range("F2").Resize(UBound(arFinal) + 1, 2) = arFinal
End Sub
选项显式
副主席(主席)
将ws设置为工作表
朦胧如长,我如长
作为对象的Dim dict
迪姆·阿基,算术,最终

设置ws=Sheet1'对我来说很有用。顺便说一句,最后一行使用一个变量,然后使用它<代码>范围(“A”&Rows.Count).End(xlUp)
每次循环运行时都进行计算;)哇哇。。。。你能用下面的新代码添加帖子吗?怎么可能你没有得到运行时错误而我得到了?我使用了你的代码。我能看到数据吗?可能是那个文件?它产生了很多副本。很接近。所以应该是6.813.104 |越南、意大利、塞尔维亚、比利时、葡萄牙、以色列。那是因为你没有照顾它。如果您在一个小数据集上尝试您的原始代码,您将看到它将创建重复的代码。最简单的方法是使用
数据选项卡|删除重复项
,然后运行宏。您也可以通过代码添加行
列(“A:B”)。RemovedUpplicates列:=数组(1,2)
放置行
。列(“A:B”)。RemovedUpplicates列:=数组(1,2)
lRow=.Range(“A”和.Rows.Count)之前。End(xlUp)。Row
在上述代码中。我尝试了“数据选项卡|删除重复项”方法,它仍然显示了意大利的多个实例,例如6.813.104,尽管在删除了所有重复项之后,6.813.104只有一个意大利实例。情况并非如此,我再次遇到同样的错误。提示这篇文章的人。我更新了答案。您可能需要刷新它才能看到它。它起作用了。如果你仍然面临一个问题。关闭工作簿并重新打开,然后重试