执行某些检查后删除1行时出错

时间:2012-03-01 02:16:17

标签: vba excel-vba excel

我尝试使用以下代码删除整行时遇到问题:

Sub Macro1()
    Dim test1row As Long, test1 As Range, firstrowtodelete As Long

    test1row = 1

    Do 
        Set test1 = Sheets("Sheet1")l.Cells(test1row,1)

        If test1 <> "actest" Or test1 <> "dctest" Then
            firstrowtodelete = test1row
            Rows(test1row).Select
            Selection.Delete Shift:=xlUp
            Exit Do
        End If

        test1row = test1row + 1
    Loop
End Sub

错误在于Rows(test1row).Select。即使它是“actest”或“dctest”,它也会删除该行。如果你知道为什么与我分享!谢谢! :)

2 个答案:

答案 0 :(得分:1)

您的If测试存在缺陷。它永远都是真的。

答案 1 :(得分:1)

您的代码存在两个问题。

第一个问题出现在这一行:

Set test1 = Sheets("Sheet1")l.Cells(test1row,1)

应该是:

Set test1 = Sheets("Sheet1").Cells(test1row, 1)

另一个问题在于:

If test1 <> "actest" Or test1 <> "dctest" Then

应该是这样的:

If test1 <> "actest" And test1 <> "dctest" Then

您的If声明始终是真的。只有当单元格的值不是“actest”并且它不是“dctest”时,使用And运算符才会给出真值,这可能是期望的行为。

以下是完整的工作代码:

Sub Macro1()
    Dim test1row As Long, test1 As Range, firstrowtodelete As Long

    test1row = 1

    Do
        Set test1 = Sheets("Sheet1").Cells(test1row, 1)

        If test1 <> "actest" And test1 <> "dctest" Then
            firstrowtodelete = test1row
            Rows(test1row).Select
            Selection.Delete Shift:=xlUp
            Exit Do
        End If

        test1row = test1row + 1
    Loop
End Sub