运行时错误“1004” – 删除行时,object'_Global的方法“范围”失败

我试图一次删除工作表中的每一个奇数行,但它返回上述错误

码:

For icount = endRow To 3 Step -2 strDelete = strDelete & "," & icount & ":" & icount Next icount strDelete = Right(strDelete, Len(strDelete) - 1) Range(strDelete).Delete shift:=xlUp '<-- Error 

这是strDelete包含的内容

7565:7565,7563:7563,7561:7561,7559:7559,7557:7557,7555:7555,7553:7553,7551:7551,7549:7549,7547:7547,7545:7545,7543:7543,

,29:29,27:27,25:25,23:23,21:21,19:19,17:17,15:15,13:13,11:11,9:9,7:7,5 :5,3:3

我们可以一次删除的行数是否有限制?

我想你已经避免了Union()方法,因为这很费时

或者可能你没有

无论如何,这耗时的,当你有这么多的行删除你必须使用Range方法

正如已经指出的那样,限制是传递给Range()方法的string的长度,这似乎必须限制在大约250个字符(可能是256 …)

所以让我们使用Range方法提供适当缩短的string

 For icount = endRow To 3 Step -2 strDelete = strDelete & "," & icount & ":" & icount Next icount DeleteAddress Right(strDelete, Len(strDelete) - 1) Sub DeleteAddress(ByVal address As String) Dim arr As Variant Dim iArr As Long Dim partialAddress As String arr = Split(address, ",") iArr = LBound(arr) Do While iArr < UBound(arr) partialAddress = "" Do While Len(partialAddress & arr(iArr)) + 1 <= 250 And iArr < UBound(arr) partialAddress = partialAddress & arr(iArr) & "," iArr = iArr + 1 Loop If Len(partialAddress & arr(iArr)) <= 250 Then partialAddress = partialAddress & arr(iArr) iArr = iArr + 1 Else partialAddress = Left(partialAddress, Len(partialAddress) - 1) End If Range(partialAddress).Delete shift:=xlUp Loop End Sub 

这比使用7k行的Union()方法快得多

可以删除的行数没有限制,但Range.Address属性可以返回的字符数有限制(或者在这种情况下通过其索引器)。 build立一个string,而不是build立一个实际的范围与Union

 Dim toDelete As Range For i = endRow To 3 Step -2 If toDelete Is Nothing Then Set toDelete = Rows(i) Else Set toDelete = Union(toDelete, Rows(i)) End If Next toDelete.Delete shift:=xlUp