VBA代码疑问:Then后仅首行生效,如何添加多条执行语句?
解决VBA中If语句多行执行的问题
嘿,这个问题其实是没搞清楚VBA里If语句的两种写法规则~
在VBA里,If语句分两种形式:
- 单行形式:如果把所有语句都跟在
Then后面同一行,那默认只有第一条语句会被当作条件成立时执行的代码(除非用冒号:分隔多条,但这种写法可读性极差,完全不推荐)。 - 多行块形式:这才是执行多条代码的正确姿势——当条件成立时需要执行多步操作,你需要把
Then单独放在一行,然后在Then和End If之间写下所有要执行的语句,这些语句都会在条件满足时依次运行。
看你给出的代码,其实已经是正确的多行块写法啦!只要你确保:
If [条件] Then单独占一行- 所有要执行的代码缩进(虽然缩进不是强制要求,但能大幅提升代码可读性)写在
Then和End If之间 - 最后一定要用
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
相关产品推荐
相关产品推荐

