如果单词拼写错误,Excel VBA将删除行
如果单元格中包含拼写错误的单词,我将尝试删除整行。如果删除了一行,is将跳过一行,从而丢失可能直接出现在另一行之后的拼写错误的单词 代码如下:如果单词拼写错误,Excel VBA将删除行,excel,vba,Excel,Vba,如果单元格中包含拼写错误的单词,我将尝试删除整行。如果删除了一行,is将跳过一行,从而丢失可能直接出现在另一行之后的拼写错误的单词 代码如下: 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()
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
我不能百分之百确定所有语法都正确,因为我不是在一台可以测试它的计算机上,但它至少应该给你一个开始的地方。这是这种循环控制逻辑(在任何编程语言中)中的一个经典问题。如果您正在迭代,比如说,5行(“#1..5”),然后删除第一行,那么。。。现在有4行,过去的第2行现在是第1行,过去的第3行现在是第2行。因此,循环继续到“第2行”,猜猜看:您刚刚跳过了“前一行第2”,现在位于位置1
如前所示,向后循环列表是一种很好的补偿方法
另一种方法,也是我个人更喜欢的方法,是首先循环浏览项目,标记您决定要删除的项目(例如,在另一列中设置标志值)。然后,在一个单独的(向后)循环中,实际删除标记的项。这将使您更容易正确地调试逻辑,以检查那些错误的乌德首先决定要执行的操作,然后返回并执行。
对于每个cl In.行(lRow)
应该是对于每个cl In.行(lRow)
,并且它在我的机器上运行良好。不同之处在于.Row
与.Rows
@JoshuaRoss感谢您的测试,现已修复。没问题,我考虑过只为您编辑,但您必须更改超过1个字符^ ^ ^@eirikdaude我以为这样做了,但我收到以下错误“无效使用Null”对于下一行代码如果不是Application.CheckSpelling(Word:=cl.Text),那么
我假设这是因为它正在检查一个不包含值的单元格中的拼写,我不是绝对确定如何定义UsedRange
,而是为每个cl in.行(lRow)切换
到对于Intersect(.Rows(lRow),.UsedRange)中的每个cl
可能有效,或者您可以在注释中引用的语句之外添加另一个If
-语句,检查单元格是否为空。更新了答案,并举例说明了如何执行后者@弗雷德朗格马尔基三