You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA代码疑问:Then后仅首行生效,如何添加多条执行语句?

解决VBA中If语句多行执行的问题

嘿,这个问题其实是没搞清楚VBA里If语句的两种写法规则~

在VBA里,If语句分两种形式:

  • 单行形式:如果把所有语句都跟在Then后面同一行,那默认只有第一条语句会被当作条件成立时执行的代码(除非用冒号:分隔多条,但这种写法可读性极差,完全不推荐)。
  • 多行块形式:这才是执行多条代码的正确姿势——当条件成立时需要执行多步操作,你需要把Then单独放在一行,然后在Then和End If之间写下所有要执行的语句,这些语句都会在条件满足时依次运行。

看你给出的代码,其实已经是正确的多行块写法啦!只要你确保:

  1. If [条件] Then单独占一行
  2. 所有要执行的代码缩进(虽然缩进不是强制要求,但能大幅提升代码可读性)写在Then和End If之间
  3. 最后一定要用End If闭合这个If块

为了让你的代码更健壮、易维护,我给你几个优化建议:

  • 把工作表对象赋值给变量,避免重复写Worksheets("xxx"),减少出错概率
  • 不要硬编码行号18288,用动态方式获取数据的最后一行,避免数据行数变化后代码失效
  • 可以用With语句简化对同一工作表的多次调用

优化后的代码示例:

Sub Opgave2()
    Dim tidligst As Date
    Dim wsBase As Worksheet
    Dim wsTidligst As Worksheet
    Dim LastRow As Long
    Dim i As Long
    
    ' 赋值工作表变量,简化后续调用
    Set wsBase = Worksheets("Base")
    Set wsTidligst = Worksheets("Tidligst Indskrevne")
    
    ' 动态获取D列数据的最后一行
    LastRow = wsBase.Cells(wsBase.Rows.Count, 4).End(xlUp).Row
    
    ' 获取最早日期
    tidligst = WorksheetFunction.Min(wsBase.Range("d2:d" & LastRow))
    
    ' 遍历行数据
    For i = 2 To LastRow
        If wsBase.Cells(i, 4) = tidligst Then
            ' 条件满足时执行的多条语句,这里可以继续添加更多操作
            wsTidligst.Cells(i, 2) = tidligst
            wsTidligst.Cells(i, 3) = wsBase.Cells(i, 12)
            ' 示例:再添加一行数据复制
            ' wsTidligst.Cells(i, 4) = wsBase.Cells(i, 1)
        End If
    Next i
End Sub

这样不管你在Then和End If之间加多少条语句,只要条件成立,都会依次执行啦!

内容的提问来源于stack exchange,提问作者Ashreen Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:15:44