एन पुनरावृत्तियों के बाद स्क्रीन अपडेट नहीं की गई - एक्सेल, वीबीए, एक्सेल-वीबीए, जबकि-लूप, क्रैश

मैं अपने पर एक बहुत ही सरल "सांप" खेल खेलता हूंएक्सेल, जिसका मतलब है कि मुझे अपने मुख्य-जबकि लूप के अंदर स्क्रीन को लगातार अद्यतन करने की आवश्यकता है। "सांप" (मूल रूप से एक रंगीन सेल) 20x20 तालिका के भीतर यादृच्छिक रूप से आगे बढ़ रहा है।

यह कई सेकंड के लिए अच्छी तरह से काम करता है, हालांकि, किसी बिंदु पर स्क्रीन अपडेट करना बंद कर देता है; एक एक्सेल प्रतिक्रिया जारी करता है, जबकि अभी भी कोड चला रहा है। यह एक दुर्घटना की ओर जाता है।

मैंने फॉर लूप के साथ लूप को बदल दिया, जोक्रैश होने से बचाता है, लेकिन फिर भी, लूप समाप्त होने तक स्क्रीन अपडेट हो जाती है। जब लूप बंद हो जाता है, तो स्क्रीन को आखिरी बार अपडेट किया जाता है। मैंने प्रत्येक समारोह के बाद "स्लीप" कथन भी शामिल किया, हालांकि, यह मदद नहीं करता है। मुख्य कोड यहां दिया गया है:

    Sub main()
Dim table(20, 20) As Integer
Dim index_move As Integer
"Position class contains only X and Y parameters
Dim index_actual_head_pos As Position
Set index_actual_head_pos = New Position

Dim i As Long
index_actual_head_pos.x = 5
index_actual_head_pos.y = 15
Application.ScreenUpdating = True

For i = 1 To 50 "this remplaces the initial while loop
"next line generates a random movement, bounded by a 20x20 matrix
index_move = generer_movement(index_actual_head_pos)
"next line updates the "snake" position params
Call update_position(index_actual_head_pos, index_move)
"next line deletes previous snake and draws a new one
Call draw(index_actual_head_pos)
Sleep (200)
Next i
End Sub

कृपया ध्यान दें कि समस्या वास्तव में स्क्रीन अपडेटिंग है। जैसा कि पहले बताया गया है, मुझे नहीं पता कि लगातार स्क्रीन को अपडेट करने के लिए एक्सेल को कैसे मजबूर किया जाए

बहुत धन्यवाद,

डेनिस

उत्तर:

उत्तर № 1 के लिए 1

आपको शायद इसे छोड़ देना चाहिए Sleep(200) और Excel अनुप्रयोग ऑब्जेक्ट को इसके बजाय 200 मिली-सेकेंड के लिए कुछ प्रोसेसिंग करने दें।

dim dTill as double   "should be at the top with the other var declarations

dtill = Timer + 0.200
do while timer < dTill and timer > 0.200: DoEvents: loop

The timer > 0.200 महत्वपूर्ण है क्योंकि आधी रात में टाइमर रीसेट करता है और आप wouldn "टी यह 24 घंटे के लिए सब कुछ ठप अगर तुम उस ¹ ⁄ ₅ दूसरे के दौरान आधी रात को पार करना चाहता हूं ।


संबंधित सवाल
सबसे लोकप्रिय