0

したがって、悪夢があり、構文とすべてが正しいですが、ロジックに欠陥があるようです:S このコードは、単語を含まない行を削除することを意図しています

Facility

Government

行 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

それでも、どういうわけか、それは私のExcelをクラッシュさせ続けます。私はそれが私のatomプロセッサのせいかもしれないと思ったので、ループのサイズを最小限に減らしました. それでもまだクラッシュしますが、バグを見つけられる人はいますか?

どんな助けでもいただければ幸いです

ありがとう!

4

3 に答える 3

1
Sub DeleteRowsBasedOnCriteria()
    Dim i As Long ' instead of integer
    ' always delete from the end
    For i = Range("B" & Rows.Count).End(xlUp).Row To 2 Step -1
        If StrComp(CStr(Range("B" & i).Value), "Facility", vbTextCompare) = 0 Or _
            StrComp(CStr(Range("B" & i).Value), "Government", vbTextCompare) = 0 Or _ 
            isEmpty(Range("B" & i)) Then
        Else
            Rows(i & ":" & i).Delete (xlShiftUp)
        End If
    Next i
End Sub
于 2013-05-16T15:03:38.267 に答える
0

Rows(i).EntireRow.Delete の代わりに、Cells(i, 2).Delete(xlShiftUp) を使用します。やるべきです。

そして、VBA.DoEvents() を wend の直前に置いて、プログラムに割り込むことができるようにします。

もう少しお役に立てるよう頑張ります!これはうまくいきます:

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

stop ステートメントで終了条件を追加し、If ステートメントをやり直したことがわかります。

于 2013-05-16T14:55:28.560 に答える