Bu öğretici, VBA'daki Bekle ve Uyku işlevlerini kullanarak kodun nasıl duraklatılacağını / geciktirileceğini gösterecektir.
Çok sayıda hesaplama yapan büyük VBA programları oluşturduğumuzda veya belki de harici programı çalıştırması için çağırdığımızda, harici işlem gerçekleşirken VBA kodumuzun belirli bir süre çalışmayı durdurmasını isteyebiliriz. VBA'nın bunu başarmak için birkaç yöntemi vardır.
Application.Wait Yönteminin Kullanımı
Bir sonraki adımı gerçekleştirmeden önce makromuzun çalışmasını bir süre veya belirli bir süreye ulaşana kadar duraklatmamız gerekirse, Uygulama.Bekleyin yöntem. Bu, örneğin, bir web sitesine oturum açma işlemini otomatikleştirdiysek ve makromuz çalışmaya devam etmeden önce sayfa yüklenene kadar birkaç saniye beklememiz gerekiyorsa yararlı olabilir.
1 Saniye Bekle
Aşağıdaki satırı makronuza dahil ettiğinizde çalışması yaklaşık 1 saniye duraklatılacaktır:
1 | Application.Wait (Now + TimeValue("0:00:01")) |
Kadar bekleyin
Bazı durumlarda belirli bir zamana kadar beklemeniz gerekecektir. Bu satırın altındaki makronuz sabah 9'dan önce ilerlemeyecektir:
1 | Başvuru. "09:00:00" bekleyin |
Lütfen unutmayın Uygulama.Bekleyin 1 saniyeden kısa gecikmeleri kabul etmez.
VBA Programlama | Code Generator sizin için çalışıyor!
Uyku Yöntemi Kullanımı
Makronuzu duraklatmak için daha kesin bir yola ihtiyacınız varsa Uyku yöntemini kullanabilirsiniz.
Uyku bir Windows API işlevidir, yani VBA'nın bir parçası değildir. Özel bir bildirim deyimi kullanılarak erişilebilir.
Microsoft Office'in 64 bit sürümünü kullanıyorsanız, Uyku işlevini kullanmak istediğiniz yeni bir modüle veya modülün başına (doğrudan alt programda değil) aşağıdaki ifadeyi ekleyebilirsiniz:
1 | Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milisaniye As LongPtr) |
32 bit sürümde bu satırı kullanın:
1 | Public Declare Sub Sleep Lib "kernel32" (ByVal Milisaniye As LongPtr) |
Uyku işlevini bildirdikten sonra, aşağıdaki gibi alt rutinlerinizde buna erişebilirsiniz:
1 | 10000 uyku |
Bu satırın üzerindeyken makronuz 10.000 milisaniye, yani 10 saniye duraklatılacaktır.
Do Olayları ile Döngü Kullanma
Bekle ve Uyku yöntemlerini kullanmanın en büyük dezavantajı, kullanıcının makronun devam etmesini beklerken Excel'de hiçbir şey yapamamasıdır. Bir kullanıcı, Excel'in yanıt vermeyi durdurduğunu düşünebilir ve kullanıcı daha sonra Ctrl+Ara makroyu kesmek için, bu, başlangıçta makroya bir duraklama koyma amacını ortadan kaldırır.
Bu sorunun üstesinden gelmek için DoEvents adında bir yöntemle bir döngü kullanabiliriz.
1234567 | Genel Alt Test()Dim kadar uzuni = 1 ila 20000 içinAralık(“A1”).Değer = iDoEventssonraki benAlt Bitiş |
Şimdi, Excel yukarıdaki makroyu çalıştırırken, kullanıcı Excel ile etkileşime devam edebilir - örneğin sekmeleri değiştirebilir veya hücreleri biçimlendirebiliriz - temel olarak makro çalışmaya devam eder ancak Excel ekranı donmaz. Excel'de bir zamanlayıcı işlevi oluşturmak için benzer bir döngü kullanabiliriz ve DoEvents zamanlayıcı çalışırken ekranı çözmek için bu yöntemde.