2016-02-04 72 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