VBA for Access - Do While 循环停止递减
Posted
技术标签:
【中文标题】VBA for Access - Do While 循环停止递减【英文标题】:VBA for Access - Do While Loop stops decrementing 【发布时间】:2016-09-08 13:58:05 【问题描述】:我在 VBA for Access 中有一个无限的 Do ... While 循环,我无法弄清楚发生了什么。我的代码与下面类似,其中我递减一个变量,当该变量小于或等于 0 时,它应该退出 while 循环。
Sub MySubRoutine (MyArray() as Double)
Dim t as Double
Dim s as Double
t = MyArray(0)
s = t / 50
Do While (t>=0)
'Various things that don't change t or s
t = t - s
Debug.Print t; " "; s; " "; t - s
Loop
End Sub
我的 Debug.Print 语句显示它在一段时间内正确递减,但随后它就停止了。这是我的即时窗口输出的开头和结尾:
1188 29.7 1158.3 1158.3 29.7 1128.6 1128.6 29.7 1098.9 1098.9 29.7 1069.2 1069.2 29.7 1039.5 1039.5 29.7 1009.8 1009.8 29.7 980.1 ... ... 207.9 29.7 178.2 178.2 29.7 148.5 176.3 29.7 146.6 176.3 29.7 146.6 176.3 29.7 146.6
如果我让它继续运行,最后 3 行将无限重复。所以在代码中t = t - s
工作了很长一段时间,然后它好像s
变成 0.0,即使我的输出显示它仍然是 29.7。它还表明在Debug.Print
行中,t - s
被正确评估。
我也尝试将t = t - s
更改为:
temp = t - s
t = temp
但这并没有帮助。
关于这里可能发生什么的任何线索?
【问题讨论】:
step
是 VBA 语法的一部分,请尝试使用不同的变量名。
这不是我的实际代码,所以 step 不是我的变量名。我已经编辑它以将“step”更改为“s”。
不知道你的 actual 代码发生了什么,但你的示例代码永远不会达到 0 - 你没有给 s
或 t
一个初始值所以t = t - s
将永远是 t=0-0
,所以 t
永远不会 >0 并且永远是 =0。
请发布您的实际代码,或者更确切地说是minimal reproducible example,因为您的代码实际上并没有重现问题。
实际密码是……密码吗?还是您有意混淆问题?
【参考方案1】:
您的代码缺少某些内容,并且您的结果不可重现。
调用值为 1212.24489795918(以获得您的第一次计算 t = 1188),循环终止,结果为(逗号是我的小数分隔符):
1188 24,2448979591837 1163,75510204082
1163,75510204082 24,2448979591837 1139,51020408163
1139,51020408163 24,2448979591837 1115,26530612245
1115,26530612245 24,2448979591837 1091,02040816327
1091,02040816327 24,2448979591837 1066,77551020408
1066,77551020408 24,2448979591837 1042,5306122449
1042,5306122449 24,2448979591837 1018,28571428571
1018,28571428571 24,2448979591837 994,040816326531
994,040816326531 24,2448979591837 969,795918367347
969,795918367347 24,2448979591837 945,551020408164
945,551020408164 24,2448979591837 921,30612244898
921,30612244898 24,2448979591837 897,061224489797
897,061224489797 24,2448979591837 872,816326530613
872,816326530613 24,2448979591837 848,571428571429
848,571428571429 24,2448979591837 824,326530612246
824,326530612246 24,2448979591837 800,081632653062
800,081632653062 24,2448979591837 775,836734693879
775,836734693879 24,2448979591837 751,591836734695
751,591836734695 24,2448979591837 727,346938775511
727,346938775511 24,2448979591837 703,102040816328
703,102040816328 24,2448979591837 678,857142857144
678,857142857144 24,2448979591837 654,61224489796
654,61224489796 24,2448979591837 630,367346938777
630,367346938777 24,2448979591837 606,122448979593
606,122448979593 24,2448979591837 581,87755102041
581,87755102041 24,2448979591837 557,632653061226
557,632653061226 24,2448979591837 533,387755102042
533,387755102042 24,2448979591837 509,142857142859
509,142857142859 24,2448979591837 484,897959183675
484,897959183675 24,2448979591837 460,653061224491
460,653061224491 24,2448979591837 436,408163265308
436,408163265308 24,2448979591837 412,163265306124
412,163265306124 24,2448979591837 387,91836734694
387,91836734694 24,2448979591837 363,673469387757
363,673469387757 24,2448979591837 339,428571428573
339,428571428573 24,2448979591837 315,183673469389
315,183673469389 24,2448979591837 290,938775510206
290,938775510206 24,2448979591837 266,693877551022
266,693877551022 24,2448979591837 242,448979591838
242,448979591838 24,2448979591837 218,204081632655
218,204081632655 24,2448979591837 193,959183673471
193,959183673471 24,2448979591837 169,714285714287
169,714285714287 24,2448979591837 145,469387755104
145,469387755104 24,2448979591837 121,22448979592
121,22448979592 24,2448979591837 96,9795918367362
96,9795918367362 24,2448979591837 72,7346938775525
72,7346938775525 24,2448979591837 48,4897959183688
48,4897959183688 24,2448979591837 24,2448979591852
24,2448979591852 24,2448979591837 1,48503431773861E-12
1,48503431773861E-12 24,2448979591837 -24,2448979591822
-24,2448979591822 24,2448979591837 -48,4897959183659
但 s 与你的 29.7 值相差甚远。
看来米奇有道理。
【讨论】:
以上是关于VBA for Access - Do While 循环停止递减的主要内容,如果未能解决你的问题,请参考以下文章