我是编程新手,目前正在努力学习 vba。我在尝试运行的每个循环都遇到问题,因为我太快退出循环。我有一个范围,我想测试它们是否存在某些值,如果存在,我想删除该列。但它只测试一次条件,然后退出循环。肯定会感谢任何帮助!
For Each cell In ActiveSheet.Range("S1:AA1")
If ActiveCell.Value = "Actual" Then
ActiveCell.EntireColumn.Delete
ElseIf ActiveCell.Value = "" Then
ActiveCell.EntireColumn.Delete
Else: ActiveCell.Offset(, 1).Select
End If
Exit For
Next
最佳答案
使用cell
而不是 ActiveCell
,并且不需要Select
.
另外,您的 Exit For
声明似乎可疑,这将在第一个单元格上退出。您通常只使用 Exit
满足某些条件时的声明,该条件需要在处理所有项目之前退出循环(即,旨在查找某事物的第一个实例的循环等)。
最后,从集合中删除成员时,需要以相反的顺序执行(否则必须采取非常措施来确保处理所有项目)。
Dim i as Long
Dim cell as Range
For i = ActiveSheet.Range("S1:AA1").Columns.Count to 1 Step - 1
Set cell = ActiveSheet.Range("S1:AA1").Cells(i)
Select Case cell.Value
Case "Actual", ""
cell.EntireColumn.Delete
Case Else
'Do nothing, unless you need to do something...
End Select
Next
注意:区分大小写和尾随/前导空格。如果您担心“ACTUAL”、“actual”、“AcTuAl”等,以及“”和“Actual”等值,您应该这样做:
Select Case UCase(Trim(cell.Value))
Case "ACTUAL", ""
...
关于vba - 退出for循环太快vba,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39414820/