我是编程的新手,目前正致力于学习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
答案 0 :(得分:5)
使用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"等,以及"等值"和"实际",你应该这样做:
Select Case UCase(Trim(cell.Value))
Case "ACTUAL", ""
...