Excel VBA Uyku İşlevi
VBA Uyku işlevi, makro prosedürün belirli bir süre boyunca çalışmasını durdurmak veya duraklatmak için kullanılan, Windows DLL dosyalarının altında bulunan bir Windows işlevidir, bu süre sonunda programı devam ettirebiliriz.
Diğer görev setlerini tamamlamak için makro çalıştırma sürecimizi duraklatmamız gereken durumlar vardır. Diğer görevler, kodlamamızın bir parçası veya diğer makro prosedürünün bir parçası olabilir veya mevcut excel makrosu için girilebilir. Programı çalışırken nasıl duraklatabilirsiniz? Prosedür kodunu kullanıcı tarafından belirlenen bir süre duraklatabilir ve bundan sonra belli bir süre sonra programı devam ettirebiliriz. Bunu VBA'da SLEEP fonksiyonunu kullanarak yapabiliriz.
VBA Uyku İşlevi Ne Yapar?
Adından da anlaşılacağı üzere UYKU, "bir süre uyu", "bir süre dinlen", "bir süre ara ver", bir süre izin ver "vb. Bunu kullanarak makro kod sürecini geciktirebiliriz.
SLEEP adında yerleşik bir fonksiyonumuz olduğunu düşünüyorsanız, yanılıyorsunuz çünkü VBA'da böyle bir fonksiyon yok, bunun yerine Windows fonksiyonu olarak Sleep adında bir fonksiyonumuz var. Özel bir kod kümesi girerek bu işlevi VBA'da gerçekten çağırabiliriz. Aslında, Windows DLL dosyalarında bulunan bir işlevdir, bu nedenle API'nin adlandırmasını vba'da alt yordamın başlamasından önce bildirmemiz gerekir.
VBA kodu aşağıdadır.
Kod:
# Eğer VBA7 Sonra Genel Olarak PtrSafe Alt Uyku Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'Excel'in 64 Bit sürümleri için # Else Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' Excel # End If
Makro kodlarını yazmaya başlamadan önce yukarıdakileri kopyalayıp modülünüze yapıştırın. Modülünüze bu şekilde yapıştırılmalıdır.
Misal
Size kodu yazmanın yolunu göstermeden önce, uyku işlevinden biraz daha bahsetmeme izin verin. İşlemi milisaniyeler içinde geciktirir. Yani 1 saniye 1000 milisaniyeye eşittir, 10 saniye duraklamak istiyorsanız 10000 milisaniye olmalıdır.Bu VBA Uyku Excel Şablonunu buradan indirebilirsiniz - VBA Uyku Excel Şablonu
Örnek 1
API kodu Alt prosedürün başlangıcından önce yapıştırıldığında, bir makro adı oluşturun.
Kod:
# Sub Sleep_Example1 () End Sub
İki değişkeni dizge olarak bildirin.
Kod:
Dim StartTime As String Dim EndTime As String
İçin StartTime değişkenin ZAMAN işlevinin değerini atayın. Not: Excel işlevindeki TIME, geçerli zamanı döndürür.
Kod:
StartTime = Zaman
Şimdi bu mesajı VBA mesaj kutusunda göstereceğiz.
Kod:
StartTime = Time MsgBox StartTime
Şimdi uyku işlevini kullanarak kodu 10 saniye duraklatacağız. Dediğim gibi, kodu milisaniye cinsinden duraklatıyor, bu yüzden 10 saniye duraklatmak için 10000 milisaniye kullanmamız gerekiyor.
Kod:
Alt Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10000) End Sub
Şimdi ikinci değişken EndTime'ı kullanın ve geçerli saati atayın.
Kod:
Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10000) EndTime = Time MsgBox EndTime End Sub
Şimdi iki değişken StartTime ve EndTime , makro başlangıç ve bitiş zamanlarını tutacaktır. Bu makroyu çalıştırın, ilk olarak makro başlangıç saatini yani sisteminizdeki güncel saati göreceğiz.
Tamam'a tıklayın, 10 saniye uyuyacaktır. Tampon sembolünü görebilirsiniz.
10 saniye sonra kodu devam ettirmeye başlayacak ve böylece bitiş zamanını gösterecektir, yani 10 saniye bekledikten sonra şu anki saat nedir.
Şimdi makronun 10:54:14 de başladığını ve 10:54:24 de bittiğini görebilirsiniz yani tam olarak 10 saniyelik fark var. Bu 10 saniyede, VBA çalışan kodu duraklatır.
Örnek 2 - Döngülerde Uyku Fonksiyonu
Sleep is best used with loops in VBA. For example, I want to insert serial numbers from 1 to 10 using Do while loop in VBA.
After inserting the one number my code should wait for 3 seconds, so when the loop runs for 10 times it should be 30 seconds in total.
Code:
Sub Sleep_Example2() Dim k As Integer k = 1 Do While k <= 10 Cells(k, 1).Value = k k = k + 1 Sleep (3000) '1000 milliseconds is 1 second so 3000 is equal to 3 seconds Loop End Sub
Run this code and you have to wait for a minimum of 30 seconds to complete the process.
To track the exact time use the below code.
Code:
Sub Sleep_Example2() Dim k As Integer Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox "Your Code Started at " & StartTime k = 1 Do While k <= 10 Cells(k, 1).Value = k k = k + 1 Sleep (3000) '1000 milliseonds is 1 second so 3000 is equal to 3 seconds Loop EndTime = Time MsgBox "Your Code Ended at " & EndTime End Sub
This code will display you 2 message box, the first one will show the starting time and the second one will show the end time.
Note: While running this code, you cannot use excel, even the escape key will not work.