使用下面的代码,我打开一个工作簿,然后我需要从打开的工作簿(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)
答案 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