উত্তর:
অপেক্ষা করুন পদ্ধতিটি ব্যবহার করুন :
Application.Wait Now + #0:00:01#
বা (এক্সেল 2010 এবং তার পরে):
Application.Wait Now + #12:00:01 AM#
Application.Wait(Now + #0:00:01#)
চিয়ার্স!
Application.Wait (Now + TimeValue("0:00:01"))
Application.wait(now + 1e-5)
এক সেকেন্ডের Application.wait(now + 0.5e-5)
জন্য, অর্ধেক সেকেন্ডের জন্য ইত্যাদি ব্যবহার করতে চাই
এটি আপনার মডিউলে যুক্ত করুন
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
Sleep()
আপনাকে 1 সেকেন্ডেরও কম সময়ের অপেক্ষা করার সময় নির্দিষ্ট করতে দেয়। Application.Wait
কখনও কখনও খুব দানাদার হয়।
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
পরিবর্তে ব্যবহার:
Application.Wait(Now + #0:00:01#)
আমি পছন্দ করি:
Application.Wait(Now + TimeValue("00:00:01"))
কারণ পরে এটি পড়া অনেক সহজ।
এটি আমার পক্ষে নির্দ্বিধায় কাজ করে। "ডু টু ডু" লুপের আগে বা পরে কোনও কোড প্রবেশ করান। আপনার ক্ষেত্রে, আপনার ডু লুপের শেষে 5 টি লাইন (সময় 1 = & সময় 2 = & "" লুপ করা পর্যন্ত করুন) রাখুন
sub whatever()
Dim time1, time2
time1 = Now
time2 = Now + TimeValue("0:00:01")
Do Until time1 >= time2
DoEvents
time1 = Now()
Loop
End sub
Timer
কারণ Timer
মধ্যরাতের ঠিক আগে এই ব্যর্থতা ব্যর্থ হয়।
কার্নেল 32.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
Timer
মধ্যরাতের পর থেকে সেকেন্ডের সংখ্যা দেয় তবে মধ্যরাতের ঠিক আগে (যেমন, sngEnd
> = 86,400) কার্যকর করা হলে এই পন্থাটি ব্যর্থ হয়। মধ্যরাতে, Timer
0 এ পুনরায় সেট করা এবং এভাবে sngEnd
চিরকালের চেয়ে কম থাকে ।
উপস্থাপিত সমাধানগুলির বেশিরভাগই অ্যাপ্লিকেশন.ওয়েট ব্যবহার করে যা স্রোতের দ্বিতীয় গণনা শুরু হওয়ার পরে ইতিমধ্যে কেটে যাওয়া সময় (মিলিসেকেন্ড) বিবেচনায় নেয় না, তাই তাদের 1 সেকেন্ড অবধি অভ্যন্তরীণ দোষ রয়েছে ।
টাইমার পদ্ধতিরাই সেরা সমাধান , তবে আপনাকে মধ্যরাতে রিসেটটি ધ્યાનમાં নিতে হবে, তাই টাইমারটি ব্যবহার করে এখানে একটি নিখুঁত ঘুমের পদ্ধতি রয়েছে:
'You can use integer (1 for 1 second) or single (1.5 for 1 and a half second)
Public Sub Sleep(vSeconds As Variant)
Dim t0 As Single, t1 As Single
t0 = Timer
Do
t1 = Timer
If t1 < t0 Then t1 = t1 + 86400 'Timer overflows at midnight
DoEvents 'optional, to avoid excel freeze while sleeping
Loop Until t1 - t0 >= vSeconds
End Sub
এটি কোনও স্লিপ ফাংশন পরীক্ষা করতে ব্যবহার করুন: (ডিবাগ তত্ক্ষণাত উইন্ডো: CTRL + G খুলুন)
Sub testSleep()
t0 = Timer
Debug.Print "Time before sleep:"; t0 'Timer format is in seconds since midnight
Sleep (1.5)
Debug.Print "Time after sleep:"; Timer
Debug.Print "Slept for:"; Timer - t0; "seconds"
End Sub
Application.Wait Second(Now) + 1
Function Delay(ByVal T As Integer)
'Function can be used to introduce a delay of up to 99 seconds
'Call Function ex: Delay 2 {introduces a 2 second delay before execution of code resumes}
strT = Mid((100 + T), 2, 2)
strSecsDelay = "00:00:" & strT
Application.Wait (Now + TimeValue(strSecsDelay))
End Function
এখানে ঘুমের বিকল্প:
Sub TDelay(delay As Long)
Dim n As Long
For n = 1 To delay
DoEvents
Next n
End Sub
নিম্নলিখিত কোডগুলিতে আমি একটি স্পিন বোতামটিতে একটি "গ্লো" প্রভাব তৈরি করি যাতে তারা যদি তাদের "সমস্যা" হয় তবে এটি লুপে "স্লিপ 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 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
আমি অ্যাপ্লিকেশন বিরতি দিতে সাধারণত টাইমার ফাংশন ব্যবহার করি । আপনার এই কোডটি .োকান
T0 = Timer
Do
Delay = Timer - T0
Loop Until Delay >= 1 'Change this value to pause time for a certain amount of seconds
Timer
মধ্যরাত থেকে সেকেন্ডের সংখ্যা দেয় তবে মধ্যরাতের ঠিক আগে (যেমন, T0
মধ্যরাত থেকে দেরি হওয়া সেকেন্ডের তুলনায় এটি কম ) কার্যকর করা হলে এই পন্থাটি ব্যর্থ হয় । মধ্যরাতে, Timer
বিলম্ব সীমা পৌঁছানোর আগে 0 এ পুনরায় সেট করুন। Delay
কখনও বিলম্বের সীমাতে পৌঁছে না, তাই লুপ চিরকালের জন্য চলে runs
Loop Until Delay >= 1
, বা আপনার ঝুঁকিটি 1 এর বেশি হবে এবং কখনও লুপটি প্রস্থান করবেন না।
অপেক্ষা করুন এবং ঘুম ফাংশনগুলি এক্সেলকে লক করে এবং বিলম্ব শেষ না হওয়া পর্যন্ত আপনি আর কিছুই করতে পারবেন না। অন্যদিকে লুপ বিলম্ব আপনাকে অপেক্ষা করার সঠিক সময় দেয় না।
সুতরাং, আমি উভয় ধারণার একটি সামান্য বিট যোগদান এই workaround করেছি। সময়টি আপনি চান না হওয়া অবধি লুপ হয়।
Private Sub Waste10Sec()
target = (Now + TimeValue("0:00:10"))
Do
DoEvents 'keeps excel running other stuff
Loop Until Now >= target
End Sub
যেখানে আপনার বিলম্ব দরকার সেখানে আপনাকে কেবল ওয়েস্ট 10 এসেকে কল করতে হবে
আপনি এখন অ্যাপ্লিকেশনটি অপেক্ষা করতে পারেন + এখনই সময়সীমা ("00:00:01") বা অ্যাপ্লিকেশন.উইট করুন + টাইমসিরিয়াল (0,0,1)
DoEvents
এখানে ডেমোডড ডেইসফয়েসেক্সেলস