2015-11-30 64 views
3

想知道是否有人注意到以下或類似代碼的行爲的變化:Range(「CustomTable」)。SpecialCells(xlCellTypeVisible).Delete現在失敗。運行時錯誤「1004」

.Range("CustomTable").SpecialCells(xlCellTypeVisible).EntireRow.Delete 

我用它來刪除過濾的範圍上ListObjects表格在Excel 2013和直到大約最後一週工作正常;現在,如果至少有兩條需要刪除的非連續行,則會拋出錯誤:"Run-time error '1004': Delete method of Range class failed。我相信不僅僅是在過濾的數據集中沒有任何東西可見,我在調試中運行它,它肯定有多行刪除,它確實給出了一個正常的整行地址,並且有多行刪除,但它未能。

我已經通過剝離出EntireRow解決了這個問題,並在確認菜單上抑制Excel警報,如果我想刪除整行。我只是問爲什麼突然停止工作?

+1

你試過'For Each'循環嗎?它很慢,但應該工作...和**只是爲了調試**你有沒有試圖做每一步選擇檢查它失敗的地方?比如'.Range(「CustomTable」)。SpecialCells(xlCellTypeVisible).Select'然後是Selection.EntireRow.Select,然後是Selection.Delete。什麼都可以按需要工作?只是爲了確保它不是觸發錯誤的刪除本身(應該有效) –

+0

對於excel來說可能過於複雜?它是很多行嗎? – Rosetta

+0

表格很奇怪。如果您嘗試使用「Listrows(n).Delete」刪除過濾表中的一行,它只會失敗。也許他們正試圖解決它。 :) – Rory

回答

1

我也遇到過這個問題。我發現的工作是保存範圍,刪除過濾器,然後以相反的順序遍歷範圍的區域(因爲範圍會隨着刪除而變化)。

我已經在「Application.Union」中添加了照顧隱藏的列。我剛剛發現一個隱藏列創建同一行的多個區域的情況。因此,解決方案是使用EntireRow獲取SpecialCells範圍,該範圍仍然爲整行提供重複區域。然後使用Application.Union,可以將它們壓縮到一個範圍內的一組獨特區域。

Set delete_range = Application.Union(.Range("CustomTable").SpecialCells(xlCellTypeVisible).EntireRow, .Range("CustomTable").SpecialCells(xlCellTypeVisible).EntireRow) 
.AutoFilter 
Set delete_range = 
For i = delete_range.Areas.Count To 1 Step -1 
    delete_range.Areas(i).EntireRow.Delete 
Next 

希望對你有用。禁用警報並未解決我的問題。我試過的其他東西都有失敗的角落案例。我假設你已經滿足於從感興趣的範圍中刪除標題(如果有的話)。

注意:我還有另一個奇怪的情況導致範圍=無。不記得發生這種情況的原因,但我還包括在處理前沒有檢查範圍。我沒有在這個答案中加入。

0

只是爲了澄清:我找到了一個解決方法,因此沒有找到一個,我只是想了解爲什麼這條線以前工作正常,現在不工作。

在任何人的情況下絆倒入此篇同時搜索該溶液中的線可以由以下3行被替換,得到相同的結果:

Application.DisplayAlerts = False 
     .Range("CustomTable").SpecialCells(xlCellTypeVisible).Delete 
    Application.DisplayAlerts = True 

P.S.我個人不是壓制警報的大粉絲,但覺得這是最理想的修復...

+0

不幸的是,這種解決方法似乎對我無效。這很奇怪,因爲該方法在我的工作簿中的其他表格上正常工作,而不需要任何解決方法** - 它只是做它應該做的事情 - 但它在此表上失敗。編輯:我錯了 - 它確實有效 - 我仍然在使用'.Entirerow.Delete'。當我切換到簡單的「。刪除」它的作品。 – blackworx

相關問題