使用VBA删除Excel中的XML重复项

时间:2015-04-18 13:45:19

标签: xml excel vba excel-vba

我有10张Excel表格,每张表格都加载了不同的XML Feed连接 因此,为了定期跟踪这10个列表更新,我使用了XML附加数据!

但问题是,每次XML表刷新时,Feed都会提供重复的项目。

现在,我希望VBA代码一次性删除所有表格中的所有重复项目。

以下是我正在使用的代码:

Sub Macro_Table()
    Dim ws As Worksheet
    Dim xmltable As LisObject

    For Each ws In ThisWorkbook.worksheets
        Set xmltable = ws.ListObjects(1)
        xmltable.Range().RemoveDuplicate Columns:=Array(4), Headers:= Yes
    Next ws
End Sub

但是在运行时 - 会出现以下错误:

  

子脚本超出范围

1 个答案:

答案 0 :(得分:3)

我猜错误是您点击了一个不包含ListObjects(1)的工作表。它必须在那条线上的原因是因为它下面的线根本没有编译:

xmltable.Range().RemoveDuplicate Columns:=Array(4), Headers:= Yes

......看起来应该更像这样:

xmltable.Range.RemoveDuplicates Columns:=Array(4), Header:=xlYes

除非引用子范围,否则您需要从.Range()调用中删除括号。 "集管:="不是参数名称,它应该是" Header:=",并且您需要使用枚举xlYes而不是未定义的值"是"。最后,RemoveDuplicate应为RemoveDuplicates

如果您没有启用Option Explicit,则Yes将成为新的Variant,被分配默认值0,并且基本上xlGuess传递给该函数。

您还应该更正变量声明,Dim xmltable As ListObject而不是LisObject

将它放回去并检查ListObject是否存在,你得到这样的东西:

Sub Macro_Table()
    Dim ws As Worksheet
    Dim xmltable As ListObject

    For Each ws In ThisWorkbook.Worksheets
        If ws.ListObjects.Count <> 0 Then
            Set xmltable = ws.ListObjects(1)
            xmltable.Range.RemoveDuplicates Columns:=Array(4), Header:=xlYes
        End If
    Next ws
End Sub