我目前正在尝试创建一个循环,从第5行开始查看C列并比较该列中的每个单元格,直到它到达该列中最后一个使用过的单元格。 将针对8个变量检查每个单元格以查看它是否匹配。如果单元格与任何变量都不匹配,则必须删除整行。
我目前的尝试如下:
Dim AC as long
Dim LastRow as long
AC=5
LastRow= Activesheet.range("A" & Rows.count).end(xlup).row
For AC = 5 To LastRow
With Cells(AC, "C")
Do Until Cells(AC, "C").Text = OC1 Or Cells(AC, "C").Text = OC2 Or Cells(AC, "C").Text = OC3 Or Cells(AC, "C").Text = OC4 Or Cells(AC, "C").Text = NC1 Or Cells(AC, "C").Text = NC2 Or Cells(AC, "C").Text = NC3 Or Cells(AC, "C").Text = NC4
Rows(AC).EntireRow.Delete
Loop
End With
Next AC
这应该确保一旦删除了一行,就会占用它的新行(例如,删除整行5将导致第6行成为第5行)所以它应该在那里退出Do循环是一个匹配,抓住下一个行号并重复,直到有另一个匹配。只有代码不断抛出执行中断错误。有人可以告诉我我做错了什么吗?
答案 0 :(得分:0)
如果您的代码导致无限循环,并且只在您尝试终止无限循环时生成错误,则可以使用以下代码:
if let content = json .object(forKey: "books") as? [[String:Any]]
for contentDic in content {
print(contentDic)
}
}
您当前正在做的事情的问题是,一旦您接近NSDictionary / NSArray
(假设您已删除任何早期的行),您正在查看空白行,因此无限删除它们。
或者,当然,您可以使用更普遍接受的删除行的方式 - 从底部开始并向上工作:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim AC As Long
Dim LastRow As Long
AC = 5
LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
Do While AC <= LastRow
If Cells(AC, "C").Text <> OC1 And _
Cells(AC, "C").Text <> OC2 And _
Cells(AC, "C").Text <> OC3 And _
Cells(AC, "C").Text <> OC4 And _
Cells(AC, "C").Text <> NC1 And _
Cells(AC, "C").Text <> NC2 And _
Cells(AC, "C").Text <> NC3 And _
Cells(AC, "C").Text <> NC4 Then
Rows(AC).Delete
LastRow = LastRow - 1
Else
AC = AC + 1
End If
Loop
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic