可以在其中更新一个For End参数吗?

时间:2019-05-29 11:08:25

标签: excel vba

我想在For内部更改我的For“ End”参数。

例如:

ForEnd = 3
for i = 1 To ForEnd
   If Something = "TRUE" Then
      ForEnd = ForEnd + 1
   End If
Next i

这不起作用,因为一旦代码通过第一行,就定义了“ End”或“ Upper Limit”参数。即使我在代码中更改它,它也会考虑原始值。

有什么想法吗?

谢谢。

4 个答案:

答案 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