我正在使用完全由VBA编写的Excel为一组设备创建预测模型。
在预测设备利用率的同时,一些设备将达到其更换阈值,而新设备将从那里接管。这将需要在表中为新设备添加新行。
我本以为For循环会是动态的,因此使用变量作为上限将在每个循环中重新评估,但这似乎并非如此。
我设置了一个简单的场景,按照下面的代码进行测试,从表中的2个列表行开始。
Sub Test1()
Set Table1 = Sheet1.ListObjects("Table1")
x = Table1.ListRows.Count
For i = 1 To x
Set NewRow = Table1.ListRows.Add
x = Table1.ListRows.Count
NewRow.Range(1, 1) = x
Next i
End Sub
我认为它可以无限运行,但只能按照提供的初始情况运行。
是否正在使用另一种类型的循环(“仅当做”或“直到做”)来实现真正动态的结果?
答案 0 :(得分:1)
总结问题评论中的内容:
Viual Basic中可能禁止修改for循环的目标。原则上还有其他语言可以进行这种操作,但是,这不是一种好的编程风格。
原因是,for循环是在固定间隔内计数的循环(在循环执行期间不应更改)。
这里可以考虑使用while循环,而不是使用for循环:
i = 1
While i <= x
Set NewRow = Table1.ListRows.Add
x = Table1.ListRows.Count
NewRow.Range(1, 1) = x
i = i+1
Wend
警告:
此循环将永远运行(或更确切地说:直到您达到最大资源量为止,在这种情况下它将崩溃)。原因是,您将迭代1的上限移得更远,同时又接近了1单位。
接近实际想要实现的最佳方法是使用缓冲区列表:
这样,您可以避免测试新插入的项目(目前很可能不会过时)。