excel-vba एम - विशिष्ट समय के लिए कैसे रोकें?(एक्सेल / VBA)





का उपयोग (11)


सोने का विकल्प यहां दिया गया है:

Sub TDelay(delay As Long)
Dim n As Long
For n = 1 To delay
DoEvents
Next n
End Sub

निम्नलिखित कोड में मैं लूप में "नींद 1000" का उपयोग करके उपयोगकर्ताओं को निर्देशित करने के लिए एक स्पिन बटन पर "चमक" प्रभाव झपकी देता हूं, जिसके परिणामस्वरूप लूप में "नींद 1000" का उपयोग नहीं होता है, जिसके परिणामस्वरूप कोई चमक नहीं होती है, लेकिन लूप बहुत अच्छा काम कर रहा है।

Sub SpinFocus()
Dim i As Long
For i = 1 To 3   '3 blinks
Worksheets(2).Shapes("SpinGlow").ZOrder (msoBringToFront)
TDelay (10000)   'this makes the glow stay lit longer than not, looks nice.
Worksheets(2).Shapes("SpinGlow").ZOrder (msoSendBackward)
TDelay (100)
Next i
End Sub

मेरे पास एक एक्सेल वर्कशीट है जिसमें निम्न मैक्रो है। मैं इसे हर सेकेंड लूप करना चाहता हूं लेकिन अगर मैं ऐसा करने के लिए फ़ंक्शन पा सकता हूं तो मुझे डर लगाना चाहिए। क्या यह संभव नहीं है?

Sub Macro1()
'
' Macro1 Macro
'
Do
    Calculate
    'Here I want to wait for one second

Loop
End Sub



Kernel32.dll में स्लीप के लिए घोषणा 64-बिट एक्सेल में काम नहीं करेगी। यह थोड़ा और सामान्य होगा:

#If VBA7 Then
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If



क्लीमो के कोड का बस एक साफ़ संस्करण - एक्सेस में काम करता है, जिसमें एप्लिकेशन नहीं है। प्रतीक्षा करें।

Public Sub Pause(sngSecs As Single)
    Dim sngEnd As Single
    sngEnd = Timer + sngSecs
    While Timer < sngEnd
        DoEvents
    Wend
End Sub

Public Sub TestPause()
    Pause 1
    MsgBox "done"
End Sub



मैं आमतौर पर एप्लिकेशन को रोकने के लिए टाइमर फ़ंक्शन का उपयोग करता हूं। इस कोड को अपने अंदर डालें

T0 = Timer
Do
    Delay = Timer - T0
Loop Until Delay = 1 'Change this value to pause time for certain amount of seconds



इसे अपने मॉड्यूल में जोड़ें

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

या, 64-बिट सिस्टम के लिए उपयोग करें:

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

इसे अपने मैक्रो में कॉल करें जैसे:

Sub Macro1()
'
' Macro1 Macro
'
Do
    Calculate
    Sleep (1000) ' delay 1 second

Loop
End Sub



इसे इस्तेमाल करे :

Threading.thread.sleep(1000)



यह मेरे लिए बेकार ढंग से काम करता है। "कब तक" लूप से पहले या उसके बाद कोई भी कोड डालें। अपने मामले में, अपने लूप के अंदर अंत में 5 लाइनें (time1 = और time2 = और "do till" loop डालें)

sub whatever()
Dim time1, time2

time1 = Now
time2 = Now + TimeValue("0:00:01")
    Do Until time1 >= time2
        DoEvents
        time1 = Now()
    Loop

End sub



मैंने समस्या का उत्तर देने के लिए यह किया था:

Sub goTIMER(NumOfSeconds As Long) 'in (seconds) as:  call gotimer (1)  'seconds
  Application.Wait now + NumOfSeconds / 86400#
  'Application.Wait (Now + TimeValue("0:00:05"))  'other
  Application.EnableEvents = True       'EVENTS
End Sub



के बजाय का उपयोग करने का:

Application.Wait(Now + #0:00:01#)

मैं पसंद करता हूं:

Application.Wait(Now + TimeValue("00:00:01"))

क्योंकि बाद में पढ़ने के लिए यह बहुत आसान है।







मैं संक्षिप्त जवाब देने जा रहा हूं क्योंकि हर किसी ने लंबे समय तक दिया है।

जब भी आप मैक्रोज़ रिकॉर्ड करते हैं और उनका पुन: उपयोग करते हैं तो आपको मिल जाएगा। चयन करें और सक्रिय करें। जब आप एक सेल या चादर का चयन करते हैं तो यह इसे सक्रिय बनाता है। उस बिंदु से जब भी आप Range.Value जैसे अयोग्य संदर्भों का उपयोग करते हैं। Range.Value वे सक्रिय सेल और शीट का उपयोग करते हैं। यह समस्याग्रस्त भी हो सकता है यदि आप नहीं देखते हैं कि आपका कोड कहां रखा गया है या उपयोगकर्ता कार्यपुस्तिका पर क्लिक करता है।

इसलिए, आप सीधे अपने सेल का संदर्भ देकर इन मुद्दों को खत्म कर सकते हैं। जो जाता है:

'create and set a range
Dim Rng As Excel.Range
Set Rng = Workbooks("Book1").Worksheets("Sheet1").Range("A1")
'OR
Set Rng = Workbooks(1).Worksheets(1).Cells(1, 1)

या आप कर सकते थे

'Just deal with the cell directly rather than creating a range
'I want to put the string "Hello" in Range A1 of sheet 1
Workbooks("Book1").Worksheets("Sheet1").Range("A1").value = "Hello"
'OR
Workbooks(1).Worksheets(1).Cells(1, 1).value = "Hello"

इन तरीकों के विभिन्न संयोजन हैं, लेकिन यह मेरे जैसे अधीर लोगों के लिए जितनी जल्दी संभव हो सके सामान्य विचार होगा।





vba excel-vba