2016-09-08 6 views
-3

私は何が起こっているのかわからないAccess for VBAの無限のDo ... Whileループを持っています。私のコードは次のようになります。ここでは、変数を減分し、その変数が0以下の場合はwhileループを終了します。アクセスのためのVBA - Do 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 

My 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 

しかし、それは助けにはなりませんでした。

ここで何が起こっているのかについての手掛かりはありますか?

+0

'step'はVBA構文の一部です。別の変数名で試してください。 – Andre

+0

これは私の実際のコードではないので、ステップは私の変数名ではありません。私は "ステップ"を "s"に変更するように編集しました。 – Eric

+0

あなたの_actual_コードで何が起こっているのか分かりませんが、あなたのサンプルコードは決して0に達しません。 's'または' t'に初期値を与えないので 't = t-s'は常に' t = 0 -0'なので、 't'は決して0にならず、常に0になります。 –

答えて

0

コードに何かが欠けていて、結果が再現できません。 1212.24489795918の値で呼び出さ

(トン= 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の値。

だから、ミッチにはポイントがあるようです。

関連する問題