2016-02-04 95 views
0

我有一個excel列中的文件路徑和名稱的長列表。我正在處理一個代碼,以刪除不包含任何我已經放入數組的部分字符串的所有單元格。我收到一個錯誤「範圍類的刪除方法失敗」。我是很新的VBA所以任何提示的讚賞,這裏是我到目前爲止有:刪除不包含部分字符串的單元格?錯誤

Sub Tester() 

Dim dontDelete As Variant 
Dim sKeep As String, x As Long 
Dim rngSearch As Range, c As Range 
Dim i As Long, j As Long 

dontDelete = Array("abel", "varo") 

    For x = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 
     For j = LBound(dontDelete) To UBound(dontDelete) 
      Set c = Range("A" & x).Cells 
      If InStr(c.Value, dontDelete(j)) = 0 Then 
       c.Delete shift:=xlShiftUp 
      End If 
     Next j 
    Next x 

End Sub 

我相信這是「c.Delete轉變:= xlShiftUp」,是造成問題,但我不不知道爲什麼?如果沒有數組中的字符串包含刪除的每一個細胞,而不是僅僅刪除細胞不包含所有這些

+0

逐句通過代碼,因爲語句看起來不錯,它可能是這樣做的行爲nota允許,看看什麼是等等...... –

+0

步進,它突出顯示黃色從dontDelete =陣列....向下c.Delete Shift ....在哪裏不會再進一步​​!我如何定義x和c有問題嗎? – IIJHFII

+0

1.代碼適用於我2.我認爲它沒有做你想做的事。這樣,只有包含「abel」和「varo」的單元纔會被刪除。 – EngJon

回答

1

代碼:

Sub Tester() 
    Dim dontDelete As Variant 
    Dim sKeep As String, x As Long 
    Dim rngSearch As Range, c As Range 
    Dim i As Long, j As Long 

    dontDelete = Array("abel", "varo") 
    Dim deleteCell As Boolean 
     For x = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 
      Set c = Range("A" & x).Cells 
      deleteCell = True 
      For j = LBound(dontDelete) To UBound(dontDelete) 
       If InStr(c.Value, dontDelete(j)) Then 
        deleteCell = False 
       End If 
      Next j 
      If deleteCell Then c.Delete shift:=xlShiftUp 
     Next x 
End Sub 

這並沒有解決錯誤,但錯誤WASN不是由代碼本身造成的,所以它以另一種方式解決。

+0

非常感謝EngJon的幫助!在這個過程中學到了關於布爾類型的一些好東西!非常感謝 – IIJHFII

+0

不客氣。總是樂於提供幫助。 – EngJon