मैं पूरी तरह से वीबीए के साथ लिखे गए एक्सेल का उपयोग कर उपकरणों के बेड़े के लिए एक पूर्वानुमान मॉडल बना रहा हूं।

उपकरणों के उपयोग की भविष्यवाणी करते समय, कुछ उपकरण अपनी प्रतिस्थापन सीमा तक पहुंच जाएंगे और वहां से एक नया उपकरण ले लिया जाएगा। इसके लिए नए उपकरणों के लिए तालिका में जोड़ी गई एक नई पंक्ति की आवश्यकता होगी।

मैंने सोचा होगा कि एक लूप के लिए गतिशील होगा, इसलिए ऊपरी सीमा के लिए एक चर का उपयोग प्रत्येक लूप पर फिर से मूल्यांकन किया जाएगा, लेकिन ऐसा नहीं लगता है।

मैंने तालिका में 2 सूची के साथ शुरू होने वाले कोड के अनुसार परीक्षण करने के लिए एक साधारण परिदृश्य स्थापित किया है।

Sub Test1()

    Set Table1 = Sheet1.ListObjects("Table1")
    x = Table1.ListRows.Count

    For i = 1 To x

        Set NewRow = Table1.ListRows.Add
        x = Table1.ListRows.Count
        NewRow.Range(1, 1) = x

    Next i

End Sub

मैंने मान लिया कि यह असीम रूप से चलेगा लेकिन यह केवल प्रदान किए गए प्रारंभिक मामले के अनुसार ही चलेगा।

क्या वास्तव में गतिशील परिणाम प्राप्त करने का केवल तरीका किसी भिन्न प्रकार के लूप का उपयोग करना है (जब तक करें या तब तक करें)?

1
Josh 12 जिंदा 2019, 10:01

1 उत्तर

सबसे बढ़िया उत्तर

टिप्पणियों में चीजों को अपने प्रश्न में समेटने के लिए:

फॉर-लूप के लक्ष्य को संशोधित करना Viual Basic में प्रतिबंधित हो सकता है। वहाँ अन्य भाषाएँ हैं जो सिद्धांत रूप में इस तरह के संचालन की अनुमति देती हैं, हालाँकि, यह एक अच्छी प्रोग्रामिंग शैली नहीं है।

इसका कारण यह है कि फॉर-लूप एक निश्चित अंतराल पर गिनने वाला लूप है (जो लूप के निष्पादन के दौरान नहीं बदलना चाहिए)।

यहां फॉर-लूप का उपयोग करने के बजाय, कोई समय-लूप का उपयोग करने पर विचार कर सकता है:

i = 1
While i <= x 
     Set NewRow = Table1.ListRows.Add
     x = Table1.ListRows.Count
     NewRow.Range(1, 1) = x
     i = i+1
Wend

सावधानी:
यह लूप हमेशा के लिए चलेगा (या यों कहें: जब तक आप अधिकतम संसाधनों तक नहीं पहुंच जाते, जिस स्थिति में यह क्रैश हो जाएगा)। इसका कारण यह है कि आप पुनरावृत्ति 1 इकाई के लिए ऊपरी सीमा को 1 इकाई से आगे बढ़ाते हुए आगे बढ़ते हैं।

आप वास्तव में जो हासिल करना चाहते हैं, उस तक पहुंचने का सबसे अच्छा तरीका बफर सूची का उपयोग करना है:

  • उन आइटम की पहचान करें जिनके लिए आप एक नई पंक्ति बनाना चाहते हैं
  • उस पंक्ति को दूसरी सूची में सम्मिलित करें
  • दूसरी सूची में पुनरावृति करें और वस्तुओं को मूल सूची में जोड़ें

इस तरह, आप नई सम्मिलित वस्तुओं का परीक्षण करने से बचते हैं (जो अब तक पुराने नहीं होंगे)।

1
Psi 13 जिंदा 2019, 06:06