2016-10-01 105 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 
相關問題