2013-10-23 48 views
0

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

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对象所需的错误。

'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时,它将显示在错误工作簿中的工作表上。我不理解为什么,因为我明确地标记R为外部工作簿这里

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

您分配'LR'两个值和我相信'LR = -1'需要是' LR = LR - 1'?因为现在'LR = -1'和'H-1'不是有效的单元格。 – CustomX

+0

是的,我修正了这个问题。 LR未设置为行数-1,因为最后一行是总计行。 – Tommy

回答

0

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

以下是用于打开外部工作簿的子,并且在一个范围内除去dublicates,从工作表1

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 
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 + '回车键'。
如果你在这里的某处发现了错误,那么你就知道你的问题在哪里。

+0

非常感谢您的建议,但更改为'LR = nb.Sheets(1).Range(“A1:H”&LR)'不会消除错误。它不会这样做,因为LR正在与现在正在定义的同一行中使用。 – Tommy

+0

尝试替换所有活动页。尝试在设置范围之前明确激活工作簿和工作表。 – Trace

+0

我更新了帖子中的代码,以显示它没有抛出一个424对象所需的错误,我猜测这是因为VBA不知道应用删除重复项的位置,即使LR已被定义为外部打开的工作簿。 – Tommy

相关问题