【发布时间】:2016-09-24 14:59:51
【问题描述】:
我尝试对工作簿中的工作表进行排序。在宏对我的表进行排序后,它应该根据 A 列删除所有重复项。
但每次我使用宏时,都会出现以下错误:
Sub SortAndRemoveDUBS()
Dim Rng As Range
Dim LastRow As Long
Dim i As Long
Application.ScreenUpdating = False
LastRow = Cells(Rows.Count, "B").End(xlUp).Row
Set Rng = Range("A4:P" & LastRow)
With Rng
.Sort Key1:=Range("A4"), Order1:=xlAscending, key2:=Range("P4"), order2:=xlDescending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End With
Dim arr() As Variant
Dim cnt As Long
cnt = 0
For i = LastRow To 2 Step -1
If WorksheetFunction.CountIf(Range(Cells(2, "A"), Cells(i, "A")), Cells(i, "A")) > 1 Then
ReDim Preserve arr(cnt)
arr(cnt) = i
cnt = cnt + 1
End If
Next i
If Len(Join(arr)) > 0 Then ActiveSheet.Range("A" & Join(arr, ",A")).EntireRow.Delete
Application.ScreenUpdating = True
End Sub
这一行被突出显示:
ActiveSheet.Range("A" & Join(arr, ",A")).EntireRow.Delete
有人知道问题出在哪里吗?
【问题讨论】:
-
不是答案,但另一种方法可能是删除 for 循环中的行?
-
我认为这会减慢宏的速度?我之前有另一个版本,但是对于那么多行来说太慢了。
-
是的,如果您找不到答案,这可能是您的最后选择。我对join函数不熟悉,所以这里帮不上忙。
-
也许您可以在 for 循环中循环 arr 元素并创建一个范围或选择它们然后立即删除。
-
您是否尝试使用此代码,activesheet.range("A2", "A4", "A6").entirerow.delete ?
标签: vba excel excel-2010