• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Application.EnableEvents=False/True; görevi nedir

Katılım
10 Kasım 2006
Mesajlar
1,288
Excel Vers. ve Dili
Excel-2016
Değerli Arkadaşlar..!
Aşağıda;
Application.EnableEvents = False
veya
Application.EnableEvents = True
kodu ne işe yarıyor, yani yaptığı görevi nedir.
 
Merhaba,
kodlar çalışırken, başka bir olayı(event) tetikliyorsa bunu önlemek için kullanılır.
Örneğin, herhangi bir nesnenin change olayında kod yazılı ise ve değişiklik meydana gelip
tetikleniyorsa, kodların çalışması bitene kadar change olayı devre dışı bırakılır.
 
Selamlar,

Bu komut genellikle sayfaya ait kodlarda kullanılmaktadır. Aşağıdaki örnekler sayfaya ait olaylardır.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
 
End Sub
 
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 
End Sub

Bazı durumlarda yazdığınız kodlar kısır döngüye girebilir. Bu durumlarda bu komut çok işinize yarayacaktır.

Aşağıdaki iki örnek kodu denerseniz farkı rahatlıkla anlayabilirsiniz.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    Range("A1") = Range("A1") + 1
End Sub

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Range("A1") = Range("A1") + 1
    Application.EnableEvents = True
End Sub
 
Arkadaşlar..! konu anlaşıldı. (eylemi amacın dışına taşırmamış oluyor) çok teşekkür ediyorum..
 
Son düzenleme:
Sn Korhan Bey
Application.EnableEvents ne işe yaradığını anlaşılır bir örnekle açıkladığınız için teşekkürler.
 
Selamlar,

Bu komut genellikle sayfaya ait kodlarda kullanılmaktadır. Aşağıdaki örnekler sayfaya ait olaylardır.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

Bazı durumlarda yazdığınız kodlar kısır döngüye girebilir. Bu durumlarda bu komut çok işinize yarayacaktır.

Aşağıdaki iki örnek kodu denerseniz farkı rahatlıkla anlayabilirsiniz.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    Range("A1") = Range("A1") + 1
End Sub

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Range("A1") = Range("A1") + 1
    Application.EnableEvents = True
End Sub



fark nedir hocam ben pek anlayamadım?
 
fark nedir hocam ben pek anlayamadım?
Her iki kod da sayfada değişiklik olduğu zaman devreye giriyor Ve her iki kod da A1 hücresine 1 ekleyip yine A1'e yazıyor. Yani kod her çalıştığında A1=1 ise 2 oluyor, tekrar çalışınca 3 oluyor vs

İlk kodda bahsedilen satırlar olmadığı için ilk değişiklikten sonra konuşuruz d A1'in tekrar değiştiğini görüyor (çünkü 1 iken 2 oldu mesela) ve tekrar 1 ekliyor. A1 yine değiştiği için bir daha çalışıyor ve A1'i yine arttırıyor ve bu böyle sonsuza excel kilitlenincete kadar devam ediyor. Çünkü kod A1 değiştiği için devreye giriyor ve A1'i değiştiriyor ve tekrar tekrar devreye giriyor.

İkinci kodda ise ilk False satırı sayesinde Change olayı geçici olarak devre dışı kalıyor ve A1 değişince devreye girmiyor. Sonra True satırıyla tekrar devreye giriyor ve sayfada değişiklik olmasını bekliyor.

Bu ve benzeri False kodları True ile düzeltilmezse diğer dosyalarda o özelliğe ihtiyaç duyulduğunda devreye girmez ve çalışmamız istenen sonucu vermez. Bu nedenle normalde True olan bir özelliği kodla False yaptığımızda kodun çalışması bitmeden True yapmamız gerekir.
 
Teşekkürler hocam.. Aşağıdaki kodum da excel dosyam aşırı yavaş çalışıyor. Bu dosya basit 1 dosyaya adapte edildiğinde 100 tane sayfayı dahi anında oluşturuyor ancak karışık datalı formüllü dosyalarda feci yavaş oluyor. Application.ScreenUpdating = False ve Application.ScreenUpdating = True ekledim ama pek 1 faydası olmadı. Buna öneriniz varmıdır?

Sub cogalt()
Application.ScreenUpdating = False
For k = 1 To Application.Sheets.Count
If IsNumeric(Sheets(k).Name) Then
sayisal = sayisal + 1
Else
harf = harf + 1
End If
Next k
Tespit = InputBox("Gün", "Tespit")
For i = sayisal To Tespit + sayisal - 1
Sheets("1").Select
Sheets("1").Copy Before:=Sheets(1)
Sheets(1).Name = i + 1
Sheets(1).Range("p1") = Sheets("1").Range("p1") + i
Next i
For j = 1 To Application.Sheets.Count - harf
On Error Resume Next
Sheets(CStr(j)).Select
Sheets(CStr(j)).Move Before:=Sheets(j)
Next j
Sheets(1).Select
Application.ScreenUpdating = True
End Sub
 

Ekli dosyalar

Geri
Üst