Excel在尝试运行循环以删除没有特定单词的行时崩溃

Excel在尝试运行循环以删除没有特定单词的行时崩溃,excel,vba,Excel,Vba,因此,有一个噩梦,语法和一切都是正确的,但逻辑似乎是有缺陷的:S 此代码用于删除不包含单词的行 Facility 及 从第2行开始的B列中的所有单元格 Sub lol() Dim i As Integer i = 2 'While i < LastRow <---- Use for real calc, LastRow calculated beforehand While i < 4 If Cells(i, 2).Value <> "Facility"

因此,有一个噩梦,语法和一切都是正确的,但逻辑似乎是有缺陷的:S 此代码用于删除不包含单词的行

Facility

从第2行开始的B列中的所有单元格

Sub lol()


Dim i As Integer
i = 2
'While i < LastRow  <---- Use for real calc, LastRow calculated beforehand
While i < 4

If Cells(i, 2).Value <> "Facility" Then
    ElseIf Cells(i, 2).Value <> "Government" Then
        Rows(i).EntireRow.Delete
    Else
        i = i + 1

    End If

Wend

End Sub
Sub-lol()
作为整数的Dim i
i=2
'而i
然后在wend前面放一个VBA.DoEvents(),这样就可以进入程序

我会试着变得更有用一点!这将有助于:

Sub lol()
    Dim rng As Excel.Range
    Dim i As Integer
    i = 2
    'While i < LastRow  <---- Use for real calc, LastRow calculated beforehand
    While i < 4

    If Cells(i, 2).Value = "" Then Stop

    If Cells(i, 2).Value <> "Facility" And Cells(i, 2).Value <> "Government" Then

            Set rng = Cells(i, 2)
            rng.Delete (xlShiftUp)

        Else
            i = i + 1

        End If
        VBA.DoEvents

    Wend

End Sub
Sub-lol()
尺寸为Excel.Range
作为整数的Dim i
i=2
'而i
然后在wend前面放一个VBA.DoEvents(),这样就可以进入程序

我会试着变得更有用一点!这将有助于:

Sub lol()
    Dim rng As Excel.Range
    Dim i As Integer
    i = 2
    'While i < LastRow  <---- Use for real calc, LastRow calculated beforehand
    While i < 4

    If Cells(i, 2).Value = "" Then Stop

    If Cells(i, 2).Value <> "Facility" And Cells(i, 2).Value <> "Government" Then

            Set rng = Cells(i, 2)
            rng.Delete (xlShiftUp)

        Else
            i = i + 1

        End If
        VBA.DoEvents

    Wend

End Sub
Sub-lol()
尺寸为Excel.Range
作为整数的Dim i
i=2

'当我ElseIf
逻辑也无法工作。改用
。最后,使用
For
循环代替While,因为它会自动索引。这是未经测试的,但应该有效:

Sub lol()
Dim i As Integer

i = 2
For i = LastRow to 2 Step -1
    If Cells(i, 2).Value <> "Facility" And Cells(i, 2).Value <> "Government" Then
        Rows(i).EntireRow.Delete
    End If
Next i
End Sub
Sub-lol()
作为整数的Dim i
i=2
对于i=最后一行到2步骤-1
如果单元格(i,2)。值“设施”和单元格(i,2)。值“政府”,则
行(i).EntireRow.Delete
如果结束
接下来我
端接头

删除行时需要后退一步,否则索引将混淆。此外,您的
ElseIf
逻辑也无法工作。改用
。最后,使用
For
循环代替While,因为它会自动索引。这是未经测试的,但应该有效:

Sub lol()
Dim i As Integer

i = 2
For i = LastRow to 2 Step -1
    If Cells(i, 2).Value <> "Facility" And Cells(i, 2).Value <> "Government" Then
        Rows(i).EntireRow.Delete
    End If
Next i
End Sub
Sub-lol()
作为整数的Dim i
i=2
对于i=最后一行到2步骤-1
如果单元格(i,2)。值“设施”和单元格(i,2)。值“政府”,则
行(i).EntireRow.Delete
如果结束
接下来我
端接头


只是对其进行了一点改进,以便您可以进入。现在它只是不断处于“运行”模式,只是对其进行了一点改进,以便您可以进入。现在它只是不断处于“运行”模式。当您说“崩溃Excel”时,您的意思是您遇到VBA错误或灾难性的Excel崩溃吗?Excel 2013 Excel卡在“运行”模式,然后没有响应,最后我不得不强行关闭它。你昨天不是问了差不多同样的问题吗?这对这个问题不起作用Jus必须添加一个空白单元格检查当你说“崩溃Excel”时,你的意思是你得到一个VBA错误还是一个灾难性的Excel崩溃?Excel 2013 Excel被困在“运行”模式,然后没有响应,最后我不得不强制关闭它。你昨天不是问了几乎相同的问题吗?这对这个问题不起作用。我必须加一个空白单元格检查。我不能做成千上万的记录来计算。这就是为什么我用iSorry,我只是看到我漏掉了它。现在试试。这很有效,非常感谢,只是一个问题,如果删除了行,逻辑指示在结束if之后增加i,而不管if条件是什么?这不意味着我跳过了行,因为当我删除行时,行会向上移动。关于这个问题,我有很多想法,因此我避免了循环。修复它,只需添加一个空白单元格检查。我不能做数千条记录进行计算,这就是为什么我使用iSorry,我只是看到我忽略了它。现在试试。这很有效,非常感谢,只是一个问题,如果删除了行,逻辑指示在结束if之后增加i,而不管if条件是什么?这是否意味着我跳过行,因为当我删除行时,行会向上移动?关于这个问题,我有很多想法,因此我避免了循环。要解决这个问题,只需添加一个空白单元格检查,只需添加一个空白单元格检查:D@Mjall2所以你不想删除那些空的?我添加了只需添加空白单元格检查:D@Mjall2所以你不想删除那些空的?我补充说