2016-10-01 111 views
0

我试图删除每一个奇数行工作表一次,但它返回的上述错误运行时错误“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

对我们可以一次删除的行数有任何限制吗?

回答

1

我觉得你一直回避Union()的方法,因为它耗时

,也可以是你已经不是

不管怎样它费时,当你有这么多的行删除你必须使用Range的方法

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

因此,让我们使用Range方法正确进缩短字符串

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 

这比Union()方法与7K加行远胜快得多

+0

是联盟费时,我会尝试。谢谢 – newguy

+0

没有更快的方法吗?像行(strDelete).Entirerow.Delete? – newguy

+0

我见过你为“最快”的事物做了一个新帖子。检查那个帖子我的答案第二个解决方案至于这篇文章,关闭它:要么选择一个答案,要么给答案者他们的答案没有解决的原因 – user3598756

2

对于可以删除的行数没有限制,但Range.Address属性可以返回(或者在这种情况下通过其索引器)的字符数有限制。而不是建立一个字符串,构建一个实际的范围内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 
相关问题