Excel VBA删除方法不删除标题

时间:2017-08-30 12:37:27

标签: excel vba excel-vba

我正在尝试创建一个循环,删除所有没有这两个值的单元格:" OI"或者" SI"。

当我执行宏时,我得到:

  

删除范围类失败的方法

我弄清楚了,因为它试图删除标题。

如何避免删除标题?

Sub DeleteValues()   

Dim i As Integer
Dim MFG_wb As Workbook
Dim Dep As Integer

Set MFG_wb = Workbooks.Open _
("C:\Users\rosipov\Desktop\eliran\MFG - GSS\MFG Daily\Fast Daily " & Format(Now(), "ddmmyy") & ".xlsx", _
UpdateLinks:=False, IgnoreReadOnlyRecommended:=True)
MFG_wb.Sheets("Aleris").Activate

Dep = MFG_wb.Sheets("Aleris").Range("O2").End(xlDown).Row

For i = Dep To 1 Step -1
    Cells(i, 15).Select
    If Not (Selection.Value = "SI" Or Selection.Value = "OI") Then
        Rows(i).Delete
    End If
Next i

End Sub

3 个答案:

答案 0 :(得分:3)

请勿尝试删除顶行 而不是For i = Dep To 1 Step -1,请使用:

For i = Dep To 2 Step -1

答案 1 :(得分:2)

你不能删除有表头的行,你必须在一个间隔中转换表然后删除它。或者只是在接下来的错误恢复中:

Sub DeleteValues()


Dim i As Integer
Dim MFG_wb As Workbook
Dim Dep As Integer



Set MFG_wb = Workbooks.Open _
    ("C:\Users\rosipov\Desktop\eliran\MFG - GSS\MFG Daily\Fast Daily " & 
Format(Now(), "ddmmyy") & ".xlsx", _
UpdateLinks:=False, IgnoreReadOnlyRecommended:=True)
MFG_wb.Sheets("Aleris").Activate

Dep = MFG_wb.Sheets("Aleris").Range("O2").End(xlDown).Row

On Error Resume Next
For i = Dep To 1 Step -1
    If Not (Cells(i, 15).Value = "SI" Or Cells(i, 15).Value = "OI") Then
        Cells(i, 15).EntireRow.Delete
    End If
Next i    

End Sub

答案 2 :(得分:2)

您需要修复循环条件。 从 1 2

For i = Dep To 2 Step -1
    Cells(i, 15).Select
    If Not (Selection.Value = "SI" Or Selection.Value = "OI") Then
        Rows(i).Delete
    End If
Next i

例如:如果 Dep 5 。循环将减少,直到 Dep 1 。之后,它将递减到 0 ,它将跳出循环。 所以你必须将循环条件设置为 2 ,这样当他到达标题行时它会退出循环。