这个 if 语句应该查看一个单元格并根据该单元格中的内容执行操作。如果我只保留语句的第一行,那么代码就可以工作,并且它只会在这种情况下做我希望它做的事情。但是,如果我在“然后”之后添加多个“任务”,它只会在整个程序中一直运行。我知道我在这里遗漏了一些语法,这将使它执行“如果 [this] Then [this, this and this] ElseIf [this] Then [this this and this]。
将第二个第六个“If”变成“ElseIf”会给我错误“ElseIf without block If”
让我知道我缺少什么,我猜测 For、Next 等的一些迭代,但我不熟悉那个函数。
Sub trythis()
Dim tol As String
Dim formblah As String
tol = Range("I7").Value
formblah = "=IF(D21>C21+" & tol & ",""FAIL"",IF(D21<C21+" & tol & ",""PASS"",IF(D21=C21+" & tol & ",""PASS-BONUS"",""N/A"")))"
If Sheets("Caliper").Range("C5").Value = 1 Then Rows("21:26").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
Range("E21:E26").Value = formblah
Range("C21") = 1
Range("C21").Select
Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
Step:=1, Stop:=6, Trend:=False
ElseIf Sheets("Caliper").Range("C5").Value = 2 Then Rows("21:28").Insert
Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
Range("E21:E28").Value = formblah
Range("C21") = 1
Range("C21").Select
Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
Step:=1, Stop:=8, Trend:=False
最佳答案
对于多行 IF,您不能在 Then 之后立即有语句,只能在 block 内。另外,你需要一个 End If
像这样:
If Sheets("Caliper").Range("C5").Value = 1 Then
Rows("21:26").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
Range("E21:E26").Value = formblah
Range("C21") = 1
Range("C21").Select
Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
Step:=1, Stop:=6, Trend:=False
ElseIf Sheets("Caliper").Range("C5").Value = 2 Then
Rows("21:28").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
Range("E21:E28").Value = formblah
Range("C21") = 1
Range("C21").Select
Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
Step:=1, Stop:=8, Trend:=False
End If
另外,见她:https://www.techonthenet.com/excel/formulas/if_then.php
关于excel - VBA If 语句不断运行 ifs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49455430/