Bir kullanıcı bir Excel çalışma kitabını açtığında ve hücrelere veri girme veya sayfalar arasında hareket etme gibi çeşitli eylemler yapmaya başladığında olaylar her zaman gerçekleşir.
Visual Basic Düzenleyicisi (ALT+F11) içinde, kullanıcı bir şey yaptığında, örneğin; bir hücreye veri girme. Alt rutin herhangi bir eylem kodu sağlamaz, yalnızca bir 'Sub' ifadesi ve aralarında kod olmayan bir 'End Sub' ifadesi sağlar. Etkili bir şekilde uykudadırlar, bu nedenle siz bir kod girene kadar hiçbir şey olmaz.
Bir çalışma sayfasındaki 'Değiştir' olayına dayalı bir örnek:
Bir VBA programcısı olarak, kullanıcı belirli bir eylemde bulunduğunda belirli şeylerin olmasını sağlamak için kod ekleyebilirsiniz. Bu size kullanıcıyı kontrol etme ve yapmasını istemediğiniz ve çalışma kitabınıza zarar verebilecek eylemleri yapmasını önleme şansı verir. Örneğin, çalışma kitabının kendi bireysel kopyasını başka bir adla kaydetmelerini isteyebilirsiniz, böylece birçok kullanıcı tarafından kullanılan orijinali etkilemezler.
Çalışma kitabını kapatırlarsa, otomatik olarak değişikliklerini kaydetmeleri istenir. Ancak, çalışma kitabında bir 'Kapatmadan Önce' olayı vardır ve çalışma kitabının kapatılmasını ve bir 'Kaydet' olayını başlatmasını önlemek için kod girebilirsiniz. Ardından, çalışma sayfasının kendisine bir düğme ekleyebilir ve üzerine kendi 'Kaydet' rutininizi koyabilirsiniz. "Kaydetmeden Önce" etkinliğini kullanarak "Kaydet" rutinini de devre dışı bırakabilirsiniz.
Olayların nasıl çalıştığını anlamak, bir VBA programcısı için kesinlikle gereklidir.
Etkinlik Türleri
Çalışma kitabı Olaylar - bu olaylar, kullanıcının çalışma kitabının kendisiyle ne yaptığına bağlı olarak tetiklenir. Çalışma kitabını açma, çalışma kitabını kapatma, çalışma kitabını kaydetme, sayfa ekleme veya silme gibi kullanıcı eylemlerini içerir.
Çalışma Sayfası Etkinlikleri - bu olaylar, belirli bir çalışma sayfasında işlem yapan bir kullanıcı tarafından tetiklenir. Çalışma kitabındaki her çalışma sayfasının, özellikle o çalışma sayfası için çeşitli olayları içeren (tüm çalışma sayfaları için değil) ayrı bir kod modülü vardır. Bunlar, bir hücrenin içeriğini değiştirme, bir hücreye çift tıklama veya bir hücreye sağ tıklama gibi kullanıcı eylemlerini içerir.
Active X Kontrol Olayları - Active X kontrolleri, Excel şeridindeki "Geliştirici" sekmesindeki "Ekle" simgesi kullanılarak bir çalışma sayfasına eklenebilir. Bunlar genellikle kullanıcının kodunuzun kontrolü altında çeşitli eylemler gerçekleştirmesini sağlayan düğme kontrolleridir, ancak bunlar aynı zamanda açılır menüler gibi nesneler de olabilir. Çalışma sayfasındaki Form kontrollerinin aksine Active X kontrollerinin kullanılması, programlanabilirlik için tam bir kapsam sağlar. Active X denetimleri, bir çalışma sayfasında form denetimlerini kullanmaya göre programlama açısından çok daha fazla esneklik sağlar.
Örneğin, çalışma sayfanızda iki açılır kontrole sahip olabilirsiniz. İkinci açılır menüdeki mevcut listenin, kullanıcının ilk açılır menüde neyi seçtiğine bağlı olmasını istiyorsunuz. İlk açılır menüdeki 'Change' olayını kullanarak, kullanıcının seçtiğini okumak için kod oluşturabilir ve ardından ikinci açılır menüyü güncelleyebilirsiniz. Kullanıcı ilk açılır menüde bir seçim yapana kadar ikinci açılır menüyü de devre dışı bırakabilirsiniz.
Kullanıcı Formu Etkinlikleri - Pop-up olarak kullanmak için profesyonel görünümlü bir form ekleyebilir ve tasarlayabilirsiniz. Formunuza yerleştirdiğiniz tüm denetimler Active X denetimleridir ve bir çalışma sayfasına yerleştirebileceğiniz Active X denetimleriyle aynı olaylara sahiptirler.
Grafik Olayları - Bu olaylar yalnızca bir grafik sayfasıyla ilgilidir ve bir çalışma sayfasının parçası olarak görünen bir grafikle ilgili değildir. Bu olaylar, grafiği yeniden boyutlandırmayı veya grafiği seçmeyi içerir.
Uygulama Etkinlikleri - Bunlar, VBA'daki Uygulama nesnesini kullanır. Örnekler, belirli bir tuşa basıldığında veya belirli bir zamana ulaşıldığında kodun çalıştırılmasına izin verir. Çalışma kitabının 7/24 açık bırakıldığı ve önceden belirlenmiş bir zamanda bir gecede harici bir kaynaktan veri aldığı bir durumu programlayabilirsiniz.
Etkinliklerde Kod Kullanmanın Tehlikeleri
Kullanıcı belirli bir eylemde bulunduğunda bir şey yapmak için kod yazarken, kodunuzun başka olayları tetikleyebileceğini ve bunun da kodunuzu sürekli bir döngüye sokabileceğini aklınızda bulundurmanız gerekir.
Örneğin, bir çalışma sayfasında 'Değiştir' olayını kullandığınızı ve böylece kullanıcı bir hücreye bir değer koyduğunda, o hücreye dayalı bir hesaplamanın hemen sağındaki hücreye yerleştirildiğini varsayalım.
Buradaki sorun, hesaplanan değerin hücreye yerleştirilmesinin başka bir 'Change' olayını tetiklemesidir, bu da daha sonra başka bir 'Change' olayını tetikler ve bu, kodunuz için kullanılacak sütunlar bitene ve kusar. bir hata mesajı.
Diğer olayların yanlışlıkla tetiklenmemesini sağlamak için olay kodunu yazarken dikkatlice düşünmeniz gerekir.
Etkinlikleri Devre Dışı Bırak
Bu sorunu aşmak için olayları devre dışı bırakmak için kodu kullanabilirsiniz. Yapmanız gereken, olay kodunuz çalışırken olayları devre dışı bırakmak için kodu dahil etmek ve ardından kodun sonunda olayları yeniden etkinleştirmek. İşte nasıl yapılacağına dair bir örnek:
1234 | Alt DisableEvents()Application.EnableEvents = YanlışApplication.EnableEvents = DoğruAlt Bitiş |
Bunun Excel uygulamasındaki tüm olayları devre dışı bıraktığını ve bu durumun Excel'deki diğer işlevleri de etkileyeceğini unutmayın. Bunu herhangi bir nedenle kullanırsanız, etkinliklerin daha sonra tekrar açıldığından emin olun.
Olaylarda Parametrelerin Önemi
Olaylar genellikle, kullanıcının ne yaptığı ve bulundukları hücre konumu hakkında daha fazla bilgi edinmek için kullanabileceğiniz parametrelere sahiptir.
Örneğin, Çalışma Sayfası Değişikliği olayı şöyle görünür:
1 | Private Sub Worksheet_Change(ByVal Target As Range) |
Range nesnesini kullanarak, kullanıcının gerçekte bulunduğu hücre satır/sütun koordinatlarını öğrenebilirsiniz.
1234 | Private Sub Worksheet_Change(ByVal Target As Range)MsgBox Hedef.SütunuMsgBox Hedef SatırıAlt Bitiş |
Kodunuzun yalnızca belirli bir sütun veya satır numarası üzerinde çalışmasını istiyorsanız, sütun gerekli değilse alt programdan çıkan bir koşul eklersiniz.
123 | Private Sub Worksheet_Change(ByVal Target As Range)If Target.Column 2 Sonra Sub'dan ÇıkınAlt Bitiş |
Bu, yalnızca kullanıcı sütun 2'deki (sütun B) bir hücreyi değiştirdiğinde çalışacağından, kodunuzun birden çok olayı tetikleme sorununu çözer.
Çalışma Kitabı Olay Örnekleri (ayrıntılı değil)
Çalışma kitabı olayları, VBE Proje Gezgini'nde 'ThisWorkbook' nesnesinin altında bulunur. Kod penceresindeki ilk açılır menüde 'Çalışma Kitabı'nı seçmeniz gerekecek ve ardından ikinci açılır menü size mevcut tüm olayları gösterecektir.
Çalışma Kitabı Açık Etkinliği
Bu olay, çalışma kitabı bir kullanıcı tarafından her açıldığında tetiklenir. Kullanıcı adını yakalayarak bir kullanıcıya hoş geldiniz mesajı koymak için kullanabilirsiniz.
123 | Özel Alt Çalışma Kitabı_Open()MsgBox "Hoş Geldiniz" & Application.UserNameAlt Bitiş |
Ayrıca, çalışma kitabına erişim yetkilerinin olup olmadığını görmek için kullanıcı adlarını gizli bir sayfada tutulan bir listeyle karşılaştırabilirsiniz. Yetkili bir kullanıcı değillerse, bir mesaj görüntüleyebilir ve çalışma kitabını kullanamayacakları şekilde kapatabilirsiniz.
Çalışma Kitabı Yeni Sayfa Etkinliği
Bu olay, bir kullanıcı çalışma kitabına yeni bir sayfa eklediğinde tetiklenir
Bu kodu, farklı kullanıcıların hepsinin sayfa eklemesi ve çalışma kitabını karıştırması yerine, yalnızca kendinize yeni bir sayfa eklemenize izin vermek için kullanabilirsiniz.
1234567 | Private Sub Workbook_NewSheet(ByVal Sh As Object)Application.DisplayAlerts = YanlışEğer Application.UserName "Richard" iseSh.SilBitirApplication.DisplayAlerts = DoğruAlt Bitiş |
Uyarıları kapatmanız gerektiğini unutmayın, çünkü sayfa silindiğinde, kullanıcının kodunuzu atlamasına izin veren bir kullanıcı uyarısı görünecektir. Uyarıları daha sonra tekrar açtığınızdan emin olun!
VBA Kodu Örnekleri Aramaktan Bıktınız mı? AutoMacro'yu deneyin!
Olayı Kaydetmeden Önce Çalışma Kitabı
Bu olay, kullanıcı "Kaydet" simgesini tıkladığında, ancak "Kaydet" fiili gerçekleşmeden önce tetiklenir.
Daha önce açıklandığı gibi, kullanıcıların değişikliklerini orijinal çalışma kitabına kaydetmesini engellemek ve onları çalışma sayfasındaki bir düğmeyi kullanarak yeni bir sürüm oluşturmaya zorlamak isteyebilirsiniz. Tek yapmanız gereken 'İptal' parametresini True olarak değiştirmek ve çalışma kitabı hiçbir zaman geleneksel yöntemle kaydedilemez.
123 | Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)İptal = DoğruAlt Bitiş |
Kapanış Olayından Önce Çalışma Kitabı
Bu olayı, kullanıcıların çalışma kitabını kapatmasını önlemek ve onları tekrar bir çalışma sayfası düğmesinden çıkmaya zorlamak için kullanabilirsiniz. Yine, 'İptal' parametresini 'True' olarak ayarladınız. Excel penceresinin sağ üst köşesindeki kırmızı X artık çalışmıyor.
123 | Private Sub Workbook_BeforeClose(Boolean Olarak İptal Et)İptal = DoğruAlt Bitiş |
Çalışma Sayfası Olay Örnekleri (ayrıntılı değil)
Çalışma sayfası olayları, VBE Proje Gezgini'nde belirli sayfa adı nesnesi altında bulunur. Kod penceresindeki ilk açılır menüde 'Çalışma Sayfası'nı seçmeniz gerekecek ve ardından ikinci açılır menü size mevcut tüm olayları gösterecektir.
Çalışma Sayfası Değişiklik Etkinliği
Bu olay, bir kullanıcı bir hücreye yeni bir değer girmek gibi bir çalışma sayfasında bir değişiklik yaptığında tetiklenir.
Bu olayı, değiştirilen hücrenin yanına ek bir değer veya yorum eklemek için kullanabilirsiniz, ancak daha önce tartışıldığı gibi, bir olaylar döngüsü oluşturmaya başlamak istemezsiniz.
12345 | Private Sub Worksheet_Change(ByVal Target As Range)If Target.Column 2 Sonra Sub'dan ÇıkınActiveSheet.Cells(Target.Row, Target.Column + 1). Değer = _ActiveSheet.Cells(Target.Row, Target.Column). Değer * 1.1Alt Bitiş |
Bu örnekte, kod yalnızca değer Sütun B'ye (sütun 2) girilirse çalışacaktır. Eğer bu doğruysa, sayıya %10 eklenecek ve bir sonraki uygun hücreye yerleştirilecektir.
Çift Tıklama Olayından Önce Çalışma Sayfası
Bir kullanıcı bir hücreye çift tıklarsa bu olay kodu tetikler. Bu, özellikle de alt satırın olumsuz olduğu durumlarda, yöneticilerin sayıların sorgulayabileceği bilanço veya kar ve zarar hesabı gibi finansal raporlar için son derece yararlı olabilir!
Bunu, bir detaya inme olanağı sağlamak için kullanabilirsiniz, böylece yönetici belirli bir sayıyı sorguladığında, tek yapmaları gereken sayıya çift tıklamak ve döküm, raporun bir parçası olarak görünür.
Bu, bir kullanıcının bakış açısından çok etkileyici ve onları sürekli 'bu sayı neden bu kadar yüksek?' diye sormaktan kurtarıyor.
Numaranın başlığını / kriterlerini bulmak için (Hedef nesne özelliklerini kullanarak) kod yazmanız ve ardından tablo verilerini filtrelemeniz ve ardından rapora kopyalamanız gerekir.
VBA Programlama | Code Generator sizin için çalışıyor!
Çalışma Sayfası Etkinleştirme Etkinliği
Bu olay, kullanıcı bir sayfadan diğerine geçtiğinde meydana gelir. Kullanıcının hareket ettiği yeni sayfa için geçerlidir.
Kullanıcı üzerinde herhangi bir şey yapmaya başlamadan önce yeni sayfanın tamamen hesaplanmasını sağlamak için kullanılabilir. Ayrıca, tüm çalışma kitabını yeniden hesaplamadan yalnızca belirli bir sayfayı yeniden hesaplamak için kullanılabilir. Çalışma kitabı büyükse ve içinde karmaşık formül varsa, bir sayfayı yeniden hesaplamak çok zaman kazandırır.
123 | Özel Alt Çalışma Sayfası_Activate()ActiveSheet.HesaplaAlt Bitiş |
Active X Kontrol Olayları (ayrıntılı değil)
Daha önce tartışıldığı gibi, Active X denetimlerini doğrudan bir çalışma sayfasına ekleyebilirsiniz. Bunlar komut düğmeleri, açılır menüler ve liste kutuları olabilir.
Active X olayları, VBE Proje Gezgini'nde belirli sayfa adı nesnesi (denetim eklediğiniz yer) altında bulunur. Kod penceresindeki ilk açılır menüde Active X denetiminin adını seçmeniz gerekecek ve ardından ikinci açılır menü size mevcut tüm olayları gösterecektir.
Komut Düğmesi Tıklama Olayı
Bir elektronik tabloya bir komut düğmesi koyduğunuzda, bir işlem yapmasını isteyeceksiniz. Bunu Click olayına kod koyarak yaparsınız.
Kodunuz çalışmadan önce bir kontrol yapılması için buna kolayca bir 'Emin misiniz mesajı?' koyabilirsiniz.
12345 | Özel Alt KomutDüğmesi1_Click ()Dim ButtonRet Varyant OlarakButtonRet = MsgBox("Bunu yapmak istediğinizden emin misiniz?", vbQuestion Or vbYesNo)ButtonRet = vbNo ise Sub'dan ÇıkınAlt Bitiş |
Açılır Aşağı (Combo Box) Olayı Değiştir
Active X açılır menüsünde bir değişiklik olayı vardır, böylece bir kullanıcı açılır listeden belirli bir öğe seçerse, bu olayı kullanarak seçimini yakalayabilir ve ardından sayfanın veya çalışma kitabının diğer bölümlerini buna göre uyarlamak için kod yazabilirsiniz.
123 | Özel Alt ComboBox1_Change ()MsgBox "Seçtiğiniz" & ComboBox1.TextAlt Bitiş |
VBA Programlama | Code Generator sizin için çalışıyor!
Onay Kutusu (Onay Kutusu) Tıklama Etkinliği
Kullanıcıya seçenek seçenekleri sağlamak için bir çalışma sayfasına bir onay veya onay kutusu ekleyebilirsiniz. Kullanıcının bu konuda herhangi bir değişiklik yapıp yapmadığını görmek için tıklama olayını kullanabilirsiniz. Döndürülen değerler, işaretlenip işaretlenmediğine göre True veya False'dır.
123 | Özel Alt CheckBox1_Click ()MsgBox CheckBox1.ValueAlt Bitiş |
UserForm Olayları (ayrıntılı değil)
Excel, kendi formlarınızı tasarlamanıza olanak tanır. Bunlar, bilgi toplamak veya kullanıcıya birden fazla seçenek sunmak için açılır pencereler olarak kullanmak için çok yararlı olabilir. Daha önce açıklandığı gibi Active X denetimlerini kullanırlar ve olaylar büyük ölçüde denetim türüne bağlı olsa da tamamen aynı olaylara sahiptirler.
İşte basit bir formun bir örneği:
Görüntülendiğinde ekranda böyle görünüyor
Form açıldığında varsayılan bir şirket adı girmek, şirket adı girişinin e-tabloda zaten bulunan biriyle aynı olup olmadığını ve yanlış yazılmadığını kontrol etmek ve tıklamaya kod eklemek gibi şeyler yapmak için formdaki olayları kullanırsınız. 'Tamam' ve 'İptal' düğmelerindeki olaylar
Formun arkasındaki kod ve olaylar, formun herhangi bir yerine çift tıklanarak görüntülenebilir.
İlk açılır menü, formdaki tüm kontrollere erişim sağlar. İkinci açılır menü etkinliklere erişim sağlar
UserForm Etkinleştirme Etkinliği
Bu olay, form etkinleştirildiğinde, normalde görüntülendiğinde tetiklenir. Bu olay, örneğin varsayılan değerleri ayarlamak için kullanılabilir. şirket adı metin kutusunda varsayılan bir şirket adı
123 | Özel Alt UserForm_Activate()TextBox1.Text = "Şirket Adım"Alt Bitiş |
VBA Programlama | Code Generator sizin için çalışıyor!
Etkinliği Değiştir
Formdaki kontrollerin çoğunda bir değişiklik olayı vardır, ancak bu örnekte, şirket adı metin kutusu, girilen şirket adının uzunluğuna bir kısıtlama koymak için olayı kullanabilir.
123456 | Özel Alt TextBox1_Change ()Len (TextBox1.Text) > 20 iseMsgBox "Ad 20 karakterle sınırlandırılmıştır", vbCriticalTextBox1.Text = ""BitirAlt Bitiş |
Etkinliğe tıklayın
Bu olayı, kullanıcının formdaki kontrollere veya hatta formun kendisine tıklayarak harekete geçmesi için kullanabilirsiniz.
Bu formda bir "Tamam" düğmesi vardır ve bir şirket adı topladıktan sonra, ileride başvurmak üzere elektronik tablodaki bir hücreye yerleştirmek isteriz.
1234 | Özel Alt KomutDüğmesi1_Click ()ActiveSheet.Range("A1"). Değer = TextBox1.TextBen.GizleAlt Bitiş |
Bu kod, kullanıcı 'Tamam' düğmesini tıkladığında çalışır. Şirket adı giriş kutusundaki değeri etkin sayfadaki A1 hücresine koyar ve ardından kullanıcı denetiminin çalışma sayfasına geri döndürülmesi için formu gizler.
Grafik Olayları
Grafik olayları, standart bir çalışma sayfasına dahil edilmiş bir grafikte değil, yalnızca ayrı bir grafik sayfasında bulunan grafiklerde çalışır.
Grafik olayları biraz sınırlıdır ve birden fazla grafiğiniz olabileceği bir çalışma sayfasında kullanılamaz. Ayrıca, kullanıcılar sayıları içeren bir çalışma sayfasından bir grafik sayfasına geçmek istemezler - burada hemen görsel bir etki yoktur.
En faydalı olay, bir kullanıcının tıkladığı bir grafiğin bileşenini bulmak olacaktır; bir pasta grafikte bir segment veya bir çubuk grafikte bir çubuk, ancak bu, standart olay aralığında mevcut bir olay değildir.
Bu sorun, kullanıcının tıkladığı grafik bileşeninin ayrıntılarını döndürecek bir "Mouse Down" olayı eklemek için bir sınıf modülü kullanılarak çözülebilir. Bu, bir çalışma sayfasındaki bir grafikte kullanılır.
Bu, bazı çok karmaşık kodlamaları içerir, ancak sonuçlar muhteşemdir. Detaylandırmalar oluşturabilirsiniz, ör. kullanıcı bir pasta grafiği segmentine tıklar ve anında o grafik gizlenir ve yerinde orijinal segment için bir detay pasta grafiği gösteren ikinci bir grafik belirir veya pasta grafiğin o segmentini destekleyen tablo verilerini üretebilirsiniz.
Uygulama Etkinlikleri
Belirli bir olaya göre kodu kapatmak için VBA'daki Uygulama nesnesini kullanabilirsiniz.
VBA Programlama | Code Generator sizin için çalışıyor!
Application.OnTime
Bu, çalışma kitabı Excel'e yüklendiği sürece düzenli aralıklarla bir kod parçası başlatmanızı sağlayabilir. Çalışma kitabınızı her 10 dakikada bir farklı bir klasöre otomatik olarak kaydetmek veya harici bir kaynaktan en son verileri getirmek için çalışma sayfasını gece boyunca çalışır durumda bırakmak isteyebilirsiniz.
Bu örnekte, bir modüle bir alt rutin girilmiştir. Her 5 dakikada bir bir mesaj kutusu görüntüler, ancak bu kolayca başka bir kodlanmış prosedür olabilir. Aynı zamanda, zamanlayıcıyı mevcut zamana artı 5 dakika daha sıfırlar.
Her çalıştığında, zamanlayıcı aynı alt rutini başka bir 5 dakika içinde çalıştırmak için sıfırlanır.
1234 | Alt TestOnTime()MsgBox "Zamanında Test Ediliyor"Application.OnTime (Now () + TimeValue("00:05:00")), "TestOnTime"Alt Bitiş |
Application.OnKey
Bu işlev, kendi kısayol tuşlarınızı tasarlamanızı sağlar. Herhangi bir tuş kombinasyonunu, yaratımınızın bir alt rutini olarak çağırabilirsiniz.
Bu örnekte 'a' harfi, hücreye 'a' yerleştirmek yerine bir mesaj kutusu gösterecek şekilde yönlendirilir. Bu kodun takılı bir modüle yerleştirilmesi gerekir.
123456 | Alt TestKeyPress()Application.OnKey "a", "TestKeyPress"Alt BitişAlt TestKeyPress()MsgBox "'a'ya bastınız"Alt Bitiş |
Her şeyden önce 'TestKeyPress' alt rutinini çalıştırıyorsunuz. Bunu yalnızca bir kez çalıştırmanız gerekir. Excel'e, 'a' harfine her basıldığında, 'TestKeyPress' alt rutinini arayacağını söyler. 'TestKeyPress' alt rutini, 'a' tuşuna bastığınızı söyleyen bir mesaj kutusu görüntüler. Elbette bir form yükleyebilir veya her türlü başka şeyi yapabilir.
'SendKeys' işlevi ile kullanabileceğiniz herhangi bir tuş kombinasyonunu kullanabilirsiniz.
Bu işlevi iptal etmek için, 'Procedure' parametresi olmadan 'OnKey' ifadesini çalıştırırsınız.
123 | Alt CancelOnKey()Application.OnKey "a"Alt Bitiş |
Artık her şey normale döndü.