Eski bir web tarayıcısı kullanıyorsunuz. Bu veya diğer siteleri görüntülemekte sorunlar yaşayabilirsiniz.. Tarayıcınızı güncellemeli veya alternatif bir tarayıcı kullanmalısınız.
Merhaba, ekli dosyamda frmMain isimli bir userform var. Bu formu açtığımda karşımıza üst menü olarak Bölümler menüsü gelmekte. Bölümler menüsüne tıkladığımızda açılan sayfanın sol tarafında fra_Menu isimli bri fream içerisinde menü başlıkları gelmekte. Yapmak istediğim işlem bu menüye tıkladığımda ilgili formu açmak. Örenk, "frm_Hedef_KPI_Yönetimi" formu gibi. Problemim gerekli tanımlamaları yapmama rağmen Excel donma yapıyor ve Task Manager üzerinden kapatmam gerekiyor. Öncelikle form açma olayını halledebilirsem çok memnun olacağım. Sonrasında Excel neden donuyor kısmında değerli hocalarımın fikirlerini merak ediyorum. Teşekkür ederim.
fra_Menu içindeki bir butona (ör. cmd_Hedef_KPI) tıklandığında ilgili formu açmanın güvenli yolu şu:
Kod:
Bu kodu görmek için giriş yapmanız gerekmektedir (7 satır).
Giriş Yap
Burada önemli olan üç şey: Unload Me kullanmıyoruz (kullanırsak alt form kapanınca dönecek bir form kalmıyor), açtığımız formu vbModal olarak gösteriyoruz, ve frmMain'i Hide ile geçici olarak gizliyoruz.
Excel'in donmasının en olası nedenleri
VBA'da bu senaryoda donma neredeyse her zaman şu üç sebepten birinden kaynaklanır:
1. Sonsuz olay döngüsü (en yaygın). Eğer menü butonunun MouseMove veya Enter event'inde başka bir formu açıyorsanız ya da hover efekti için sürekli renk değiştiriyorsanız, açılan form bu event'i tekrar tetikleyebilir ve sistem kilitlenir. Form açma işlemini mutlaka Click event'ine bağlayın, MouseMove veya MouseDown gibi olaylara değil.
2. Alt formun Initialize veya Activate event'inden frmMain'e referans verilmesi. Örneğin frm_Hedef_KPI_Yönetimi'nin Initialize'ında frmMain.fra_Menu.Visible = ... gibi bir satır varsa, frmMain modal olarak duruyorsa bu kilitlenmeye sebep olur.
3. Show çağrısının bir Frame'in click handler'ı içinden yapılması ve Frame'in alt kontrollerinin event'lerinin de tetiklenmesi. Bu durumda Application.EnableEvents = False ile True arasına almak yardımcı olabilir, ama esas çözüm yapıyı düzeltmektir.
Hızlı tanı için
Donmadan önce ne olduğunu görmek için Click event'inizin başına Debug.Print "tıklandı: " & Now ekleyip Immediate penceresini (Ctrl+G) açık tutun. Eğer satır birden fazla yazılıyorsa olay tekrar tetikleniyor demektir — yani 1. madde sizin durumunuz.
Dosyayı yeniden yüklerseniz mevcut kodunuza bakıp tam olarak nerede takıldığını söylemek mümkün olabilir. Ya da Bölümler menü tıklamasının ve cmd_... butonlarından birinin kodunu buraya yapıştırırsanız da olur.
Bu site, içeriği kişiselleştirmek, deneyiminize uyarlamak ve kayıt olmanız durumunda giriş yapmanızı sağlamak için yasal düzenlemelere uygun çerezler (cookies) kullanır.
Bu siteyi kullanmaya devam ederek, çerez kullanımına izin veriyorsunuz.