VBA For循环修改maxValues上限不生效,求技术解答
关于VBA For循环中修改终止值不生效的问题解答
这是个非常典型的VBA For循环“坑”,我刚接触VBA时也栽过跟头!
为什么修改maxValues没用?
VBA的For...Next循环有个很容易被忽略的特性:循环的起始值、终止值和步长,会在循环开始执行的第一时间就被固定下来。也就是说,当你写下For i = 1 To maxValues时,VBA会立刻把1和当时maxValues的数值(也就是10)存起来,之后哪怕你在循环里修改maxValues,循环的终止条件依然只会参照一开始存储的那个10,所以i永远不会超过初始的10。
怎么实现你需要的动态循环逻辑?
如果你需要根据循环内的操作动态调整循环的终止条件,推荐改用Do While(或Do Until)循环,因为它每次迭代都会重新检查终止条件,能完美适配你的需求。示例代码如下:
maxValues = 10 i = 1 ' 手动初始化循环变量 Do While i <= maxValues ' 这里放你的相关操作代码... ' 根据条件动态调整maxValues If True Then maxValues = maxValues + 1 ' 记得把True换成你实际的判断条件 i = i + 1 ' 必须手动递增循环变量,否则会陷入无限循环! Loop
注意事项
用Do循环时一定要记得手动控制i的递增(或者递减),如果你的判断条件一直满足maxValues增加的情况,又忘记递增i,就会触发无限循环,这点一定要留意。
内容的提问来源于stack exchange,提问作者Ivo Sousa
相关产品推荐
相关产品推荐

