vba - 退出for循环太快vba

标签 vba excel

我是编程新手,目前正在努力学习 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/

相关文章:

excel - 在 Excel Office-js 加载项中获取当前登录用户

vba - 使用不一致的分隔符拆分字符串

excel - VBA Excel 处理范围

excel - 访问 VBA 创建不合格的引用,同时通过 excel 工作表循环

excel - Range.Clear 上的 VBA 运行时错误 1004

excel - 如何使用 VBA 将 Microsoft Word 公式导入 Microsoft Excel?

Excel-VBA 从 Outlook AddressList 中获取筛选的集合

excel - 共享adodb模块之间的连接VBA

excel - 如何在不提示用户保存文件的情况下保存 Excel?

vba - Excel VBA 选择包含文本字符串的单元格,然后将这些单元格复制并粘贴到新工作簿中