EXCEL VBA'DA DO EVENTS FONKSİYONU

 


Excel'in VBA DoEvents işlevi, VBA makrolarınızın yanıt verme hızını kontrol etmek için etkili bir araçtır. Ayrıca, bir makro yürütülürken sistemin diğer olayları işlemesini sağlar. Excel, VBA makrosu tamamlanana kadar çalışmaz hale gelebilir çünkü yürütüldüğünde genellikle tek ve sürekli bir işlem olarak çalışır.


VBA DoEvents'ı kodunuz boyunca stratejik olarak yerleştirerek Excel uygulamasına kullanıcı etkileşimleri, ekran güncellemeleri ve diğer olaylar üzerinde geçici kontrol sağlayabilirsiniz . Aşağıda, bir döngü içinde kullanıcı etkileşimini kolaylaştırmak için VBA DoEvents işlevinin kullanımına dair bir örnek verilmiştir.

"X"in o andaki "i" değeri olduğu bir "For döngüsü" içinde "Yineleme X" metninin bulunduğu bir ileti kutusu görünür. Kullanıcı, bu görsel geri bildirim aracılığıyla döngünün ilerlemesi hakkında bilgilendirilir. Önemli olarak, döngü, kullanıcıların döngü hala çalışırken görüntülenen ileti kutusuyla etkileşime girebilmelerini sağlamak için DoEvents işlevini kullanır.

VBA DoEvents - Tanım Örneği - 1

Her mesaj kutusu görüntülendikten sonra döngü bir sonraki yinelemeye geçer ve kullanıcı bu kutuyla etkileşime girme olanağına sahip olur.

Tanım Örneği - 2a
Tanım Örneği - 2b
Tanım Örneği - 2c

Üç yinelemenin de tamamlanmasının ardından, sürecin tamamlandığını belirten "Döngü tamamlandı!" metninin yer aldığı son bir mesaj kutusu görüntülenir.

VBA Pivot Tablosunu Yenileme - Tanım Örneği - 3

ÖNEMLİ NOKTALAR

  • VBA DoEvents, uzun kodlar çalışırken sistemin ve Excel dosyalarının yanıt vermemesini önlemek için çok önemlidir.
  • VBA DoEvents'i kullanmazsanız, özellikle uygulamayı sık kullanıyorsanız, sisteminiz donabilir veya çökebilir.
  • Makrolarınıza bekleme veya duraklatma işlevi eklemek için “Application.Wait” ile birlikte “VBA DoEvents wait” kullanın. Bu yöntem, VBA kodunuz çalışırken kullanıcı arayüzünün duyarlı kalmasını sağlar ve kontrollü zamanlama aralıklarına olanak tanır.
  • “VBA DoEvents Sleep”i “özel döngüler” veya “Application.Wait” gibi diğer yöntemlerle birlikte kullanarak uyku veya bekleme efekti yaratabilirsiniz.
  • VBA DoEvents activate komutunu etkinleştirme komutlarıyla birlikte kullanarak Excel makrolarında kullanıcı etkileşimini iyileştirebilirsiniz.

DoEvents Fonksiyonu Nasıl Kullanılır?

Excel VBA'da DoEvents işlevini kullanmak için şu adımları izleyin.

  1. Excel çalışma kitabınızı açın ve Visual Basic for Applications (VBA) düzenleyicisine erişmek için ALT + F11 tuşlarına basın.


    DoEvents Fonksiyonu Nasıl Kullanılır - Adım 1

  2. Menüde “Ekle”ye tıklayıp “Modül”ü seçerek yeni bir modül ekleyin.


    DoEvents Fonksiyonu Nasıl Kullanılır - Adım 2

  3. DoEvents fonksiyonunu VBA kodunuzda istediğiniz yere koyun.

    Örneğin:

    Sub MyMacro()
    ' Kodunuzu buraya yazınız
    DoEvents
    ' Kodunuza devam edin
    End Sub

  4. VBA makronuzu VBA düzenleyicisinden çalıştırabilir veya bir Excel düğmesine veya kısayoluna atayabilirsiniz.


Kodun Çalışmasını Nasıl Keserim?

Bazen, DoEvents kullanan çalışan bir VBA makrosunu kesmeniz gerekebilir. Bunu nasıl yapabileceğiniz aşağıda açıklanmıştır.

  • Adım 1: Makronun Çalıştırılmasını Durdurun

Makro çalışırken klavyenizi kullanarak Ctrl + Break (veya genellikle Ctrl + Fn + Pause/Break tuşu) tuşlarına basabilirsiniz. Bu, makronun yürütülmesinin duraklamasına neden olur.

  • Adım 2: Debug or Abort

Bir sonraki adım, VBA editöründe “Durdur” düğmesini seçerek makroyu durdurmak mı yoksa “Hata Ayıkla” düğmesini seçerek kodu hata ayıklamak mı istediğinizi seçmektir.

Örnekler

Örnek 1 – Duyarlı Kullanıcı Arayüzü

Karmaşık bir hesaplamayı yürüten bir VBA makronuz olduğunu varsayalım . Excel, hesaplama bitene kadar DoEvents olmadan yanıt vermeyi durdurur. Kullanıcı arayüzünün yanıt vermeye devam etmesini ve makro çalışırken kullanıcıların işlemi iptal edebilmesini veya Excel ile çalışabilmesini, kodunuz boyunca stratejik olarak DoEvents yerleştirerek sağlayabilirsiniz.

  • Adım 1: LengthyCalculation adında yeni bir alt rutin tanımlayarak başlıyoruz.
Excel'de VBA DoEvents - Örnek 1 - Adım 1
  • Adım 2: İki değişken tanımlıyoruz: sayıların toplamını saklamak için total ve döngü sayacı olarak kullanmak için i .
Örnek 1 - Adım 2
  • Adım 3: 1'den 1000'e kadar yinelemeli bir döngü başlatıyoruz ve döngü içerisinde aşağıdaki adımları gerçekleştiriyoruz.
Örnek 1 - Adım 3

  • Adım 4: Döngü içerisinde, i'nin mevcut değerini toplama ekleyerek toplam değerini hesaplarız .
Örnek 1 - Adım 4
  • Adım 5 : i değerinin 100'ün katı olup olmadığını kontrol ediyoruz. Eğer öyleyse, koşulu giriyoruz.
Örnek 1 - Adım 5
  • Adım 6 : Excel sistemine kontrolü devretmek için DoEvents işlevini kullanırız. Bu, makro çalışırken Excel'in diğer olayları işlemesine olanak tanır.
Örnek 1 - Adım 6
  • Adım 7: Koşulu sonlandırıp i 1000'e ulaşana kadar döngüye devam ediyoruz.
Örnek 1 - Adım 7
  • Adım 8: Burada 1'den 1000'e kadar olan sayıların toplamını gösteren bir " MsgBox " fonksiyonu kullanıyoruz .
Örnek 1 - Adım 8
  • Adım 9: Makroyu kaydedin ve çalıştır'a tıklayın. Kod, 1'den 1000'e kadar olan sayıları uzun bir süre boyunca toplarken ve periyodik olarak kontrolü sisteme geri verirken Excel'in duyarlı kalmasını sağlamak için VBA DoEvents'i kullanır. Tamamlandığında, 1'den 1000'e kadar olan sayıların toplamı bir mesaj kutusunda görünür.
Excel'de VBA DoEvents - Örnek 1 - Adım 9

İşte tam kod

Sub LengthyCalculation()
Dim total As Double
Dim i As Long
For i = 1 To 1000
total = total + i
If i Mod 100 = 0 Then
DoEvents ‘Yield control to the system
End If
Next i
MsgBox “1'den 1000'e kadar olan sayıların toplamı:  ” & total
End Sub


Örnek 2 – Bir Zamanlayıcı ile Bir Hücre Değerini Güncelleme

Bu örnekte, DoEvents fonksiyonunu kullanarak Excel çalışma sayfasındaki bir hücre değerini her saniye bir kez güncelleyeceğiz.

  • Adım 1 : Yeni modülde, “UpdateCellValueWithTimer” adlı bir alt rutin oluşturarak ve Integer türünde bir “i” değişkeni bildirerek başlıyoruz. Bu değişken bir döngü sayacı olarak kullanılacak.
Excel'de VBA DoEvents - Örnek 2 - Adım 1
  • Adım 2: 1'den 5'e kadar yineleme yapacak bir For döngüsü başlatıyoruz. Bu döngü bir hücre değerini 5 saniye boyunca güncelleyecektir.
Örnek 2 - Adım 2
  • Adım 3: Döngünün içinde, etkin çalışma sayfasındaki A1 hücresinin (satır 1, sütun 1) değerini güncellemek için VBA'daki Cells' işlevini kullanırız. Hücre, "Update" metni ve ardından i'nin geçerli değeriyle güncellenir.
Örnek 2 - Adım 3
  • Adım 4: DoEvents işlevini kullanarak Excel sistemine kontrol veriyoruz . Excel artık döngü çalışırken ek olayları ve kullanıcı etkileşimlerini işleyebilir. Bu durumda Excel arayüzünün duyarlı kalmasını sağlar.
Excel'de VBA DoEvents - Örnek 2 - Adım 4
  • Adım 5: “Application.Wait” metodunu kullanarak kodun yürütülmesini bir saniyeliğine duraklatırız. Şimdiki zaman Now ile temsil edilir ve bir saniyelik zaman aralığı TimeValue(“00:00:01”) ile belirtilir. Bu, döngünün her bir saniyede bir yinelemesini sağlar.
Excel'de VBA DoEvents - Örnek 2 - Adım 5
  • Adım 6: Döngünün bir sonraki yinelemesine devam ediyoruz. Bu döngü beş kez çalışacak, her seferinde hücre değerini güncelleyecek, kontrolü DoEvents ile sisteme bırakacak ve 1 saniye bekleyecek.
Örnek 2 - Adım 6
  • Adım 7 : Döngü tamamlandıktan sonra (yani 5 saniye sonra), güncellemelerin tamamlandığını belirtmek için “Güncellemeler tamamlandı!” metninin bulunduğu bir mesaj kutusu görüntüleriz.
Örnek 2 - Adım 7
  • Adım 8: Şimdi makroyu kaydedin ve çalıştır'a tıklayın. Beş saniye boyunca, bu kod her saniye bir Excel çalışma sayfasındaki A1 hücresinin değerini günceller. Sistemin yanıt vermesini sağlamak için, VBA DoEvents kullanımıyla sisteme periyodik olarak kontrol verir.
Excel'de VBA DoEvents - Örnek 2 - Adım 8a

Daha sonra güncellemelerin bittiğini belirten bir mesaj kutusu gösterilir.

Excel'de VBA DoEvents - Örnek 2 - Adım 8b

İşte tam kod:

Sub UpdateCellValueWithTimer()
Dim i As Integer
For i = 1 To 5
Cells(1, 1).Value = “Update ” & i
DoEvents ‘Yield control to the system
Application.Wait Now + TimeValue(“00:00:01”)
Next i
MsgBox “Güncellemeler tamamlandı!”
End Sub

Örnek 3 – Kullanıcı Girişini İşleme

Burada amaç, bir makro yürütülürken kullanıcıdan girdi istemektir. DoEvents, makronun çalışmasını durdurmadan kullanıcı girdisini işlemenize olanak tanır.

  • Adım 1: İlk olarak GetUserInput adında yeni bir alt rutin tanımlıyoruz.
Excel VBA DoEvents - Örnek 3 - Adım 1
  • Adım 2: Kullanıcıdan gelen girdiyi saklamak için userInput adında bir değişken tanımlıyoruz ve kullanıcıdan bir değer girmesini istemek için InputBox fonksiyonunu kullanıyoruz.
Örnek 3 - Adım 2

  • Adım 3 : Burada, kullanıcının girdi sağlayıp sağlamadığını kontrol ediyoruz (giriş kutusu iptal edilmedi). Giriş sağlanmışsa, girilen değerle bir mesaj kutusu gösteriyoruz. Giriş sağlanmamışsa, farklı bir mesaj gösteriyoruz.
Örnek 3 - Adım 3
  • Adım 4: Makroyu kaydedin ve çalıştır'a tıklayın. Bu kod, kullanıcıdan bir değer girmesini istemek için bir giriş kutusu kullanır.
Excel VBA DoEvents - Örnek 3 - Adım 4a

Daha sonra makro, kullanıcının girdisine yanıt olarak çalışır ve herhangi bir girdi sağlanmadığını belirten bir mesaj veya girilmişse girilen değeri içeren bir mesaj kutusu gösterir.

Excel VBA DoEvents - Örnek 3 - Adım 4b

İşte tam kod:

Sub GetUserInput()
Dim userInput As String
userInput = InputBox(“Bir değer girin:”)
If userInput <> “” Then
MsgBox “Girdiniz: ” & userInput
Else
MsgBox “Giriş sağlanmadı.”
End If
End Sub

Dikkat Edilmesi Gereken Önemli Noktalar

  • VBA DoEvents, VBA makro duyarlılığını geliştirmek için yararlı bir araç olsa da, yalnızca seyrek olarak kullanılmalıdır. DoEvents kullanımı öngörülebilir davranışa yol açabilir ve kodunuzun hata ayıklamasını daha karmaşık hale getirebilir.
  • VBA DoEvents'i kullanırken ortaya çıkabilecek öngörülemeyen durumlarla başa çıkmak için VBA kodunuzun gerekli hata işleme özelliğine sahip olduğunu doğrulayın .
  • Makronuzun performansı, VBA DoEvents'ı kullanmaktan etkilenebilir çünkü bu sıklıkla sisteme kontrol verir. Performans arasında takaslar olabileceğini kabul edin.
  • Tamamen VBA DoEvents'e bağlı kalmadan yanıt vermeyi istiyorsanız, arka plan çalışan iş parçacıklarını kullanmayı veya kodunuzu bir VBA DoEvents alternatifi olarak optimize etmeyi düşünün.

Yorum Gönder

DT KARİYER KPSS Dünyasına Hoş Geldiniz
Sevgili dostum nasıl yardımcı olabilirim?
Bu alana yazınız...