0

使用下面的代码,我打开一个工作簿,然后我需要从打开的工作簿 (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 时,它是错误工作簿中工作表的工作表。我不明白为什么,因为我在这里明确地将 r 标记为外部工作簿

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

2 回答 2

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 + 'Enter key'。
如果您在这里的某个地方遇到错误,那么您就知道问题出在哪里。

于 2013-10-23T08:40:44.763 回答
0

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

以下是用于打开外部工作簿的子项,并从工作表 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
于 2013-10-23T11:03:37.430 回答