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

使用VBA删除Excel中的XML重复项,xml,vba,excel,Xml,Vba,Excel,我有10张Excel表格,每一张都加载了不同的XML提要连接。 因此,为了定期跟踪这10个列表更新,我使用了XML追加数据 但这里的问题是,每次刷新XML表时,提要都会提供重复的项 现在,我想要一个VBA代码,一次删除所有工作表中的所有重复项 以下是我正在使用的代码: Sub Macro_Table() Dim ws As Worksheet Dim xmltable As LisObject For Each ws In ThisWorkbook.worksheets

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

但这里的问题是,每次刷新XML表时,提要都会提供重复的项

现在,我想要一个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
但运行此操作时,将出现以下错误:

子脚本超出范围


我猜错误在于您点击的工作表不包含
ListObjects(1)
。它必须位于该行上的原因是它下面的行根本无法编译:

xmltable.Range().RemoveDuplicate Columns:=Array(4), Headers:= Yes
…应该更像这样:

xmltable.Range.RemoveDuplicates Columns:=Array(4), Header:=xlYes
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
除非引用子范围,否则需要从.Range()调用中删除括号。“Headers:=”不是参数名,它应该是“Header:=”,您需要使用枚举xlYes而不是未定义的值“Yes”。最后,
RemoveDuplicate
应该是
RemoveDuplicates

如果您没有启用
选项Explicit
,Yes将是一个新的变量,被分配一个默认值0,并作为基本
xlGuess
传递给函数

您还应该将变量声明,
Dim xmltable改为ListObject
,而不是
LisObject

将它放回一起,检查ListObject是否存在,得到如下结果:

xmltable.Range.RemoveDuplicates Columns:=Array(4), Header:=xlYes
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
子宏_表()
将ws设置为工作表
Dim xmltable作为ListObject
对于此工作簿中的每个ws。工作表
如果ws.ListObjects.Count为0,则
Set xmltable=ws.ListObjects(1)
xmltable.Range.RemoveDuplicates列:=数组(4),标题:=xlYes
如果结束
下一个ws
端接头