Saya memiliki lembar kerja Excel yang memiliki makro berikut. Saya ingin mengulanginya setiap detik tetapi gagal jika saya dapat menemukan fungsi untuk melakukan itu. Apa tidak mungkin?
Sub Macro1()
'
' Macro1 Macro
'
Do
Calculate
'Here I want to wait for one second
Loop
End Sub
DoEvents
sini dailydoseofexcel.com/archives/2005/06/14/stopwatchApplication.Wait(Now + #0:00:01#)
Cheers!Application.Wait (Now + TimeValue("0:00:01"))
Application.wait(now + 1e-5)
untuk satu detik,Application.wait(now + 0.5e-5)
selama setengah detik, dll.Tambahkan ini ke modul Anda
Atau, untuk penggunaan sistem 64-bit:
Sebut saja di makro Anda seperti ini:
sumber
Sleep()
memungkinkan Anda menentukan waktu tunggu kurang dari 1 detik.Application.Wait
terkadang terlalu terperinci.Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
daripada menggunakan:
saya lebih memilih:
karena jauh lebih mudah dibaca setelahnya.
sumber
ini bekerja dengan sempurna untuk saya. masukkan kode apa pun sebelum atau setelah loop "lakukan hingga". Dalam kasus Anda, letakkan 5 baris (time1 = & time2 = & loop "lakukan sampai") di akhir di dalam loop do Anda
sumber
Timer
karenaTimer
pendekatan gagal sebelum tengah malam.Deklarasi untuk Tidur di kernel32.dll tidak akan berfungsi di Excel 64-bit. Ini akan menjadi sedikit lebih umum:
sumber
Hanya versi kode clemo yang dibersihkan - berfungsi di Access, yang tidak memiliki fungsi Application.Wait.
sumber
Timer
memberikan jumlah detik sejak tengah malam, maka pendekatan ini gagal jika dijalankan tepat sebelum tengah malam (misalnyasngEnd
> = 86.400). Pada tengah malam,Timer
reset ke 0 dan dengan demikian tetap kurang darisngEnd
selamanya.Sebagian besar solusi yang disajikan menggunakan Application.Wait, yang tidak memperhitungkan waktu (milidetik) yang telah berlalu sejak penghitungan detik saat ini dimulai, sehingga solusi tersebut memiliki ketidaktepatan intrinsik hingga 1 detik .
Pendekatan Timer adalah solusi terbaik , tetapi Anda harus memperhitungkan reset pada tengah malam, jadi berikut adalah metode Tidur yang sangat tepat menggunakan Timer:
GUNAKAN INI UNTUK MENGUJI FUNGSI TIDUR: (buka jendela debug Segera: CTRL + G)
sumber
Application.Wait Second(Now) + 1
sumber
sumber
Berikut ini alternatif untuk tidur:
Dalam kode berikut saya membuat efek "cahaya" berkedip pada tombol putar untuk mengarahkan pengguna ke sana jika mereka "mengalami masalah", menggunakan "tidur 1000" di loop mengakibatkan tidak ada kedipan yang terlihat, tetapi loop berfungsi dengan baik.
sumber
Saya membuat ini untuk menjawab masalah:
sumber
Saya biasanya menggunakan fungsi Timer untuk menghentikan aplikasi. Masukkan kode ini ke milik Anda
sumber
Timer
memberikan jumlah detik sejak tengah malam, maka pendekatan ini gagal jika dijalankan tepat sebelum tengah malam (misalnya,T0
kurang dari jumlah detik penundaan dari tengah malam). Pada tengah malam,Timer
setel ulang ke 0 sebelum batas penundaan tercapai.Delay
tidak pernah mencapai batas penundaan, sehingga loop berjalan selamanya.Loop Until Delay >= 1
, atau Anda berisiko melewati 1 dan tidak pernah keluar dari loop.Fungsi Tunggu dan Tidur mengunci Excel dan Anda tidak dapat melakukan apa pun hingga penundaan selesai. Di sisi lain, penundaan loop tidak memberi Anda waktu yang tepat untuk menunggu.
Jadi, saya telah membuat solusi ini dengan menggabungkan sedikit dari kedua konsep tersebut. Ini berulang sampai waktu yang Anda inginkan.
Anda hanya perlu menelepon Waste10Sec jika Anda membutuhkan penundaan
sumber
Coba ini :
sumber
Anda dapat menggunakan Application.wait now + timevalue ("00:00:01") atau Application.wait now + timeserial (0,0,1)
sumber