मेरे पास शीट 3 में एक श्रेणी में कुछ डेटा है, उदाहरण के लिए, ए 1 से एच 1 के रूप में कहें। यह डेटा हर 5 मिनट में अपने आप अपडेट होता रहता है।

इस डेटा को किसी अन्य शीट 4 में कैसे कॉपी करें? हर अपडेट में हर 5 मिनट में डेटा की एक नई पंक्ति जोड़नी चाहिए।

0
Soccent 4500X 31 जिंदा 2021, 07:54

2 जवाब

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

आप एप्लिकेशन का उपयोग कर सकते हैं। हर 5 मिनट में अपना कोड लूप करने के लिए प्रतीक्षा करें। यहां एक उदाहरण दिया गया है कि आप इसे हर सेकेंड, 10 सेकंड के लिए कैसे कर सकते हैं। परीक्षण करते समय मेरा सुझाव है कि आप अनंत लूप से बचने के लिए हमेशा एक समय सीमा का उपयोग करें और यह सुनिश्चित करने के लिए कि सब कुछ सही है, तो आप बस "hh:mm:ss" प्रारूप का उपयोग करके समय बदलते हैं। आप कॉपी/पेस्ट कमांड का उपयोग कर सकते हैं, या सीधे सेल मान सेट कर सकते हैं, जैसे मैंने इस उदाहरण में किया था।

Sub CpValues_Loop()
    tStop = Now + TimeValue("00:00:10") '"hh:mm:ss" Limit time to avoid infinite loop while testing
    r = 1 'first row to paste values
    Do Until t > tStop
        CpValues (r)
        r = r + 1
        DoEvents 'refresh screen
        Application.Wait (Now + TimeValue("00:00:01"))
        t = Now
    Loop
End Sub
Sub CpValues(r)
    For i = 1 To 8
        Sheets("Sheet4").Cells(r, i) = Sheets("Sheet3").Cells(1, i)
    Next i
End Sub

संपादित करें

जैसा कि साइमन द्वारा सुझाया गया है, एक सार्वजनिक बूलियन लूप को प्रारंभ/बंद करने के लिए सही होगा, फिर आप स्टार्ट और स्टॉप फ़ंक्शन को कॉल करने के लिए बटन सम्मिलित कर सकते हैं। प्रतीक्षा या टाइमर का उपयोग करने के बारे में, मुझे लगता है कि यह एक्सेल संस्करणों पर निर्भर करता है और यदि आपको लूप के दौरान चीजों को बदलने की आवश्यकता है या नहीं। मैं अब तक टाइमर को नहीं जानता था, लेकिन यह अच्छा लग रहा है, उसका समाधान यहां अच्छा काम करता है, बस वही चुनें जो आपके लिए सबसे अच्छा काम करता है।

Public CpStop As Boolean
Sub CpValues_Loop()
    tStop = Now + TimeValue("00:00:20") '"hh:mm:ss" Limit time to avoid infinite loop while testing
    CpStop = False
    'Sheets("Sheet4").Range("A1:H100").ClearContents 'to clear and test again
    r = 1 'first row to paste values
    Do Until t > tStop Or CpStop = True
        CpValues (r)
        r = r + 1
        DoEvents 'refresh screen
        Application.Wait (Now + TimeValue("00:00:02"))
        DoEvents
        t = Now
    Loop
End Sub
Sub CpValues(r)
    For i = 1 To 8
        Sheets("Sheet4").Cells(r, i) = Sheets("Sheet3").Cells(1, i)
    Next i
End Sub
Sub CpValues_Stop()
    CpStop = True
End Sub
0
Ivan 31 जिंदा 2021, 17:42

कुछ लोगों के लिए Application.Wait पूरे एप्लिकेशन को फ्रीज कर देता है (मुझे एक के लिए) इसलिए मैं इससे बचना चाहता हूं। सुनिश्चित नहीं है कि ऐसा क्यों होता है, लेकिन ऐसा होता है, इसलिए इसके बजाय मैं Timer या Application.OnTime के साथ जाता हूं जो मेरे लिए बेहतर काम करता है। यहाँ मैं नीचे के साथ आया हूँ। यह रुकने तक हर 5 मिनट में लगातार लूप करेगा। मैंने एक अतिरिक्त उप शामिल किया है जिसे आप किसी सार्वजनिक बूलियन का उपयोग करके किसी भी समय कोड को रोकने के लिए एक बटन से लिंक कर सकते हैं।

मेरा कोड भी प्रत्येक कॉलम के माध्यम से लूपिंग की बजाय सीमा को पकड़ लेता है।

Public StopCopy As Boolean

Sub Copy_Loop()

Dim EndTime As Long, i As Long, sht1 As Worksheet, sht2 As Worksheet

Set sht1 = Worksheets("Sheet3") 'Set as your sheet to copy from
Set sht2 = Worksheets("Sheet4") 'Your sheet to copy to
EndTime = 300 'Amount of time to wait in seconds (300 = 5 mins)
StopCopy = False
i = 1 'Your starting row

NextCopy:
t = Timer
sht2.Range("A" & i, "H" & i).Value = sht1.Range("A1:H1").Value 'Copying range A:H. Change columns as needed
i = i + 1 'Move to next row to paste new data to after time is up

Do While Timer < t + EndTime
    If StopCopy = True Then
        MsgBox "Copy Loop has been stopped.", vbInformation, "Process stopped" 'Msgbox so user knows looping has stopped. Remove if unwanted.
        Exit Sub
    End If
    DoEvents 'Keep Excel operational
Loop

GoTo NextCopy

End Sub

Sub Stop_Copy_Loop()

StopCopy = True

End Sub
0
Simon 31 जिंदा 2021, 12:57