我想在For内部更改我的For“ End”参数。
例如:
ForEnd = 3
for i = 1 To ForEnd
If Something = "TRUE" Then
ForEnd = ForEnd + 1
End If
Next i
这不起作用,因为一旦代码通过第一行,就定义了“ End”或“ Upper Limit”参数。即使我在代码中更改它,它也会考虑原始值。
有什么想法吗?
谢谢。
答案 0 :(得分:1)
如Olff所述,用while循环替换for循环:
ForEnd = 3
i = 1
while i<ForEnd
If Something = "TRUE" Then
ForEnd = ForEnd + 1
End If
i = i + 1
Wend
请注意不要以无限循环结束! (Something
必须定期与"TRUE"
不同)
另一种可行的方法(更现代的方法)是使用Do..Loop
方法:
ForEnd = 3
i = 1
Do While i<ForEnd
If Something = "TRUE" Then
ForEnd = ForEnd + 1
End If
i = i + 1
Loop
答案 1 :(得分:0)
我不知道为什么您需要增加结尾,为什么不能使用其他选项作为Do...Loop
,但这对您有用。尝试使其适应您的需求:
Dim ForEnd As Byte 'Limit or FOR...NEXT
Dim i As Byte 'Counter of FOR...NEXT
Dim XX As Byte 'It will store the last value of i when we restart the FOR...NEXT
Dim Something As String
ForEnd = 3
XX = 1 'First value of i
For_Start:
For i = XX To ForEnd Step 1
If Something = "TRUE" Then
ForEnd = ForEnd + 1
XX = i + 1
GoTo For_Start
End If
Next i
使用另一个变量处理循环的最后位置,然后使用GoTo
答案 2 :(得分:0)
在标题中使用const或变量时,您无法控制For
循环的上限。但是,使用函数可以做到这一点:
for i = 1 To ForEnd(i)
' commands
Next i
Function ForEnd(k as Long) As Long
If Something = "TRUE" Then
ForEnd = 0
Else
ForEnd = k + 1
End If
End Function
尽管我宁愿如上所述使用Do While
。如果您需要For
循环,则可以使用Exit For
来中断循环,以防万一:
for i = 1 To 111111
If Something = "False" Then Exit For
Next i
答案 3 :(得分:0)
您可以使用:
Option Explicit
Sub test()
Dim i As Long
i = 1
Do Until i > 6
ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value = 20
i = i + 1
Loop
End Sub