Excel VBA删除行如果拼写错误的话

我想删除整个行,如果一个单元格包含拼写错误的单词。 如果删除一行,则跳过一行,从而错过任何可能直接出现的拼写错误的单词。

这里是代码:

Sub DeleteMispelledCells() For Each cl In ActiveSheet.UsedRange If Not Application.CheckSpelling(Word:=cl.Text) Then _ cl.EntireRow.Delete Next cl End Sub 

我理解的问题是cl没有考虑到当前行被删除,但我不知道如何纠正这一点。 我也知道,如果循环从最后一行到最后一行,而不是从第一行到最后一行,它也会被纠正。 但是,我也不知道怎么做。

为了以相反的顺序循环遍历每一行,你可以这样做:

 Sub DeleteMispelledCells() Dim lRow As Long, cl As Range With ActiveSheet For lRow = .UsedRange.Rows.Count To 1 Step -1 For Each cl In .Rows(lRow) If Not IsEmpty(cl) Then If Not Application.CheckSpelling(Word:=cl.Text) Then cl.EntireRow.Delete Exit For End If End If Next cl Next lRow End With End Sub 

我并不是100%确定所有的语法都是正确的,因为我不在我可以testing的计算机上,但至less应该给你一个启动的地方。

这是这种循环控制逻辑(在任何编程语言中)的一个经典问题。 如果你迭代5行(“#1..5”),并删除第一行,那么…现在有4行,以前的行#2现在是行#1和以前是#3行现在是#2。 所以,循环进行到“第2行”,并猜测:刚刚跳过“ 一行#2”,现在在位置#1。

如前所述,将列表向后循环是补偿的一个好方法。

另一种方法,我个人比较喜欢的方法是循环这些项目, 标记你决定要删除的项目(例如在另一列中设置一个标志值)。 然后,在一个单独的(向后)循环中,实际上删除标记的项目。 这将使你更容易地正确debugging检查这些悲伤的wurds的逻辑。 ;-)首先决定你想做什么,然后回去做。