VBA删除另一个工作簿中的重复行

时间:2013-10-23 08:36:55

标签: excel vba

使用下面的代码,我打开一个工作簿,然后我需要从打开的工作簿(nb)中的行中删除所有重复项。

Dim nb As Workbook, tw As Workbook, ts As Worksheet
 a = Application.GetOpenFilename
 If a = False Or IsEmpty(a) Then Exit Sub
 With Application
   .ScreenUpdating = False
End With
Set tw = ThisWorkbook
Set ts = tw.ActiveSheet
Set nb = Workbooks.Open(a)

我已经尝试了各种方法来实现这一点,但似乎我缺少一个基本的部分,以便在工作簿上调用它。我得到了一个424 Object Required错误。

'Remove duplicates
Dim r As Range
c = nb.ActiveSheet.UsedRange.Rows.Count
LR = c - 1

Set r = nb.ActiveSheet.Range("A8:H" & LR)
r.RemoveDuplicates Columns:=Array(1), Header:=xlNo

给出错误的行(需要424对象)是

r.RemoveDuplicates Columns:=Array(1), Header:=xlNo

我认为这是因为r是一个范围,但没有设置为特定的工作簿,

当我查看对象r时,它是错误的工作簿中的Sheet表。我不明白为什么,因为我明确地将r标记为此处的外部工作簿

    Set r = nb.ActiveSheet.Range("A8:H" & LR)

2 个答案:

答案 0 :(得分:0)

请勿使用Activesheet - >它伤害了我的眼睛。

为您的工作表命名,然后使用

进行调用
LR = nb.sheets('somesheet').Range("A1:H" & LR)

您会发现整个程序中的错误较少。 尝试在设置范围之前显式激活工作簿和工作表。

修改 根据您的第二个问题,您应该调试:

1)检查使用范围

Dim oRange as excel.range 

nb.sheets("NAMEYOURSHEET").activate 
set oRange = nb.sheets("NAMEYOURSHEET").UsedRange

在即时窗口中输入:oRange.select +'输入键' 如果你在这里的某处发现了一个错误,那么你就知道问题所在。

答案 1 :(得分:0)

问题是合并的单元格,当范围内的合并单元格有重复时,VBA代码不知道该怎么做,据我所知。

以下是打开外部工作簿的子文件,并从工作表1中删除了范围内的dublicates

Sub remDup3()
Dim nb As Workbook, tw As Workbook, ts As Worksheet
 a = Application.GetOpenFilename
 If a = False Or IsEmpty(a) Then Exit Sub
 With Application
 .ScreenUpdating = False
 End With
 Set tw = ThisWorkbook
 Set ts = tw.ActiveSheet
 Set nb = Workbooks.Open(a)

LR = nb.Sheets(1).UsedRange.Rows.Count

        With nb.Sheets(1)
        Set Rng = Range("A9:H" & LR)
        Rng.RemoveDuplicates Columns:=Array(4), Header:=xlNo
    End With
End Sub