close

標題:

 

此文章來自奇摩知識+如有不便請留言告知

VB~堆疊空間不足

發問:

Private Sub B_Change(Index As Integer)If Index = 0 Then '公斤B(1) = Val(B(0)) / 1000 '公斤換算成公噸ElseIf Index = 1 Then '公噸B(0) = Val(B(1)) * 1000 '公噸換算成公斤B(2) = Val(B(1)) * 1000000 '公噸換算成公克B(3) = Val(B(1)) * 2204.634 '公噸換算成磅ElseIf Index = 2 Then '公克B(0) = Val(B(2)) *... 顯示更多 Private Sub B_Change(Index As Integer) If Index = 0 Then '公斤 B(1) = Val(B(0)) / 1000 '公斤換算成公噸 ElseIf Index = 1 Then '公噸 B(0) = Val(B(1)) * 1000 '公噸換算成公斤 B(2) = Val(B(1)) * 1000000 '公噸換算成公克 B(3) = Val(B(1)) * 2204.634 '公噸換算成磅 ElseIf Index = 2 Then '公克 B(0) = Val(B(2)) * 0.001 '公克換算成公斤 B(1) = Val(B(2)) * 0.000001 '公克換算成公噸 B(3) = Val(B(2)) * 0.0022 '公克換算成磅 End If --------------------- 這樣是沒問題 但是如果最下多了一段 Private Sub B_Change(Index As Integer) If Index = 0 Then '公斤 B(1) = Val(B(0)) / 1000 '公斤換算成公噸 ElseIf Index = 1 Then '公噸 B(0) = Val(B(1)) * 1000 '公噸換算成公斤 B(2) = Val(B(1)) * 1000000 '公噸換算成公克 B(3) = Val(B(1)) * 2204.634 '公噸換算成磅 ElseIf Index = 2 Then '公克 B(0) = Val(B(2)) * 0.001 '公克換算成公斤 B(1) = Val(B(2)) * 0.000001 '公克換算成公噸 B(3) = Val(B(2)) * 0.0022 '公克換算成磅 ElseIf Index = 3 Then '磅 B(0) = Val(B(3)) * 0.454 '磅換算成公斤 B(1) = Val(B(3)) * 0.000454 '磅換算成公噸 B(2) = Val(B(3)) * 454 '磅換算成公克 End If ----------------------- 就會出現"執行階段錯誤"28":堆疊空間不足" 這是什麼原因 可以告訴我 該怎麼修改嗎(我是新手 最好從那邊叫出功能開始講起) ---------------------------------------------------------- Private Sub C_Change(Index As Integer) If Index = 0 Then '華氏 C(1) = (((Val(C(0)) - 32))) * 5 / 9 '華氏換算成攝氏 ElseIf Index = 1 Then '攝氏 C(0) = Val(C(1)) * 9 / 5 + 32 '攝氏換算成華氏 End If End Sub ----------------------------------------------- 上面這個如果在華氏打1會變成1.00000000000004 在攝氏打1就會變成0.999999999999998 轉換是沒問題 是否可以不要讓他變數掉 更新: 原因__INDEX=1 與 index=2 =>各有二個 不同的B(3)設定值 更正__將B(3)二個資料值作區分_再指定給 INDEX=3的條件使用_就不會有 bug 是要怎麼區分勒 更新 2: 使用 Format_或 int取整數 __設定你要的數字 又要去那裡設定 可不可以詳細說明@@ 更新 3: =.= Private Sub B_KeyPress(Index As Integer, KeyAscii As Integer) 這告到底要怎麼用勒 我用都沒反應@@

最佳解答:

因為你是用Change所以在填入數字時,它會繼續跑,所以請改用下列程式 Private Sub B_KeyPress(Index As Integer, KeyAscii As Integer) If KeyAscii = 13 Then '按Enter鍵 If Index = 0 Then '公斤 B(1) = Val(B(0)) / 1000 '公斤換算成公噸 ElseIf Index = 1 Then '公噸 B(0) = Val(B(1)) * 1000 '公噸換算成公斤 B(2) = Val(B(1)) * 1000000 '公噸換算成公克 B(3) = Val(B(1)) * 2204.634 '公噸換算成磅 ElseIf Index = 2 Then '公克 B(0) = Val(B(2)) * 0.001 '公克換算成公斤 B(1) = Val(B(2)) * 0.000001 '公克換算成公噸 B(3) = Val(B(2)) * 0.0022 '公克換算成磅 ElseIf Index = 3 Then '磅 B(0) = Val(B(3)) * 0.454 '磅換算成公斤 B(1) = Val(B(3)) * 0.000454 '磅換算成公噸 B(2) = Val(B(3)) * 454 '磅換算成公克 End If End If End Sub Private Sub C_KeyPress(Index As Integer, KeyAscii As Integer) If KeyAscii = 13 Then '按Enter鍵 If Index = 0 Then '華氏 C(1) = (((Val(C(0)) - 32))) * 5 / 9 '華氏換算成攝氏 C(1) = Format(C(1), "0.00") '取兩位數 ElseIf Index = 1 Then '攝氏 C(0) = Val(C(1)) * 9 / 5 + 32 '攝氏換算成華氏 End If End If End Sub

其他解答:

請檢查 : 是否因為程式自己呼叫自己, 造成跑不完 ... 也許您的 B 是一個物件陣列吧 !? 我猜可能是輸入物件... Sub B_Change() 表示 : B 被修改時, 就會觸發執行... 結果可能是 : 使用者輸入(更改) >> 觸發 Change 事件 >> 執行程序 Sub B_Change() >> 程序去修改 B 的值 >> 既然 B 被修改, 自然又要觸發 Sub B_Change() 程序再去修改 B 的值 >> : : 程序將無法停止, 造成記憶體不足... 補充 堆疊空間不足 : 堆疊 : 進階程式常會用到的技巧; 即是利用程序 [自己呼叫自己], 以縮短程式碼, 或達成程式更大的彈性... 2. 1會變成1.00000000000004 或 0.999999999999998 這是因為電腦資料以 2 進位類型 方式進行 儲存 與 計算 的關係, 試想您所有參與 計算 的數據, 都要先轉成 2 進位類型 , 自然形成很多無窮小數了 ... 解決方法就是指定輸出格式 : Format(數值,格式形態) 這個函數試試看...|||||1: 原因__INDEX=1 與 index=2 =>各有二個 不同的B(3)設定值 更正__將B(3)二個資料值作區分_再指定給 INDEX=3的條件使用_就不會有 bug 2:使用 Format_或 int取整數 __設定你要的數字7C4150FCDCEDD023

arrow
arrow
    創作者介紹
    創作者 yffuhxy 的頭像
    yffuhxy

    yffuhxy的部落格

    yffuhxy 發表在 痞客邦 留言(0) 人氣()