Excel 如何告诉计算机;“循环”;属于;直到;在VBA中?
我对do-until循环有问题。下面的第一个测试代码(代码1)运行良好。但是,如果我将“Then”后面的部分放在新行中,如第二个代码所示(因为我计划在“Then”后面添加更多命令),它将返回错误消息“Loop without do”。 工作代码(代码1)为: 不工作代码(代码2)如下所示: 问候Excel 如何告诉计算机;“循环”;属于;直到;在VBA中?,excel,do-loops,vba,Excel,Do Loops,Vba,我对do-until循环有问题。下面的第一个测试代码(代码1)运行良好。但是,如果我将“Then”后面的部分放在新行中,如第二个代码所示(因为我计划在“Then”后面添加更多命令),它将返回错误消息“Loop without do”。 工作代码(代码1)为: 不工作代码(代码2)如下所示: 问候 ference即使您收到的错误消息是“loop with do”,该错误实际上是关于您的if语句,该语句要求在您希望在if语句中执行的命令之后有一行单独的End if 当这样的标记丢失时,您通常会收到一
ference即使您收到的错误消息是“loop with do”,该错误实际上是关于您的if语句,该语句要求在您希望在if语句中执行的命令之后有一行单独的
End if
当这样的标记丢失时,您通常会收到一条错误消息,该消息并不表示实际的错误,因此在调试时,请注意那些丢失的结束元素(End If
,Next
,Loop
,等等)
作为补充,这里讨论了If语句的单行版本与多行版本:
1) 当条件为true时,只有一条语句要执行时:
- 您可以使用多行版本,该版本需要
结尾,如果结尾处有
:
Else
或ElseIf
,以便在条件返回false时执行某些操作,还需要多行版本**()
2) 当条件为真时,如果要执行多条语句:
- 您应该像这样使用多行版本:
- 您可以,但可能应该避免使用单行版本。但若您真的想这样做,那个么您必须将它和冒号(:)结合使用来分隔语句,如下所示:
*:如第2部分所述,您不必绝对切换,但强烈建议您这样做
**:您实际上可以使用
If条件然后做其他事情做其他事情,但出于可读性原因,我不鼓励这样做。在循环之前,需要在单独的一行上有一个End If
语句,直到
。正如@DecimalTurn所述,在一行上有第一个If语句,因此不需要“End If”行。第二个代码需要“End If”,因为您在“Then”之后使用了单独的一行,所以您需要关闭“If”语句。@DecimalTurn,您可以回答这个问题,所以它不会显得没有答案。@DecimalTurn,我想这个注释很快就会被删除,因为它不会对问题添加任何内容,但我是这里的新手,很难不说谢谢。谢谢你!
Sub CopyValues()
Dim s As Integer
Dim r As Integer
Cells(2, 4).Value = "Before"
Cells(2, 5).Value = "After"
For r = 1 To 3
s = 0
Do
s = s + 1
If InStr(Cells(s, 2).Value, "ROI_" & r & "A") > 0 Then Cells(Rows.Count, 4).End(xlUp).Offset(1, 0) = Cells(s, 2).Value
Loop Until InStr(Cells(s, 2).Value, "ROI_" & r & "A") > 0
Next r
End Sub
Sub CopyValues()
Dim s As Integer
Dim r As Integer
Cells(2, 4).Value = "Before"
Cells(2, 5).Value = "After"
For r = 1 To 3
s = 0
Do
s = s + 1
If InStr(Cells(s, 2).Value, "ROI_" & r & "A") > 0 Then
Cells(Rows.Count, 4).End(xlUp).Offset(1, 0) = Cells(s, 2).Value
Loop Until InStr(Cells(s, 2).Value, "ROI_" & r & "A") > 0
Next r
End Sub
If Condition Then
Do_Something
End If
If Condition Then Do_Something
If Condition Then
Do_Something
Do_Another_Thing
End If
If Condition Then Do_Something: Do_Another_Thing