AaVBA - BB yok

Bu eğitim size VBA'daki Sınıf Modülleri hakkında bilgi verecektir. Bunların ne olduğunu ve nasıl kullanılacağını öğreneceksiniz.

VBA Sınıf Modülleri - Giriş

Kodunuzu girmek için Visual Basic Düzenleyicisine (VBE) modüller eklediğinizde, 'Sınıf Modülü' denen şeyi de ekleyebileceğinizi fark etmiş olabilirsiniz.

Sınıf Modülleri ve Modüller

Sınıf modülleri, daha sonra normal VBA kodunuzda kullanılabilecek bir Bileşen Nesne Modeli (COM) oluşturmayı kolaylaştırdıkları için sıradan modüllerden çok farklı bir şekilde çalışır.

Etkili bir şekilde, 'Çalışma Sayfaları' gibi yerleşik bir Excel nesnesiyle aynı şekilde çalışan bir nesne yaratırsınız. Çalışma Sayfaları Nesnesinde, bir çalışma kitabı içindeki çalışma sayfalarının sayısını veya bir çalışma sayfasının her bir adını veya çok sayıda başka bilgiyi almanıza izin veren bir dizi özellik ve yönteminiz vardır.

Bu şekilde yeni bir Nesne oluşturduğunuzda, VBA içinde herhangi bir yerde kullanılabilecek bir yapı taşı oluşturmuş olursunuz. Nesnenin, VBA kodunuz tarafından çalışma kitabının herhangi bir yerinden, kodu yeniden yazmaya devam etmek zorunda kalmadan erişilebilen bir dizi özelliği ve yöntemi vardır.

Standart bir VBA modülünden yeni nesnenize başvurmanın yanı sıra, onu özel uygulamanızın parçası olan bir UserForm'un arkasındaki kodda da kullanabilirsiniz.

Bunu, Active X denetimlerini bir çalışma sayfasına yerleştirdiğiniz komut düğmesi veya açılır menü gibi yerlerde de kullanabilirsiniz. Bu kontrollerin tümü VBA kullanır ve yeni nesneniz bu kontroller için olay koduna kolayca dahil edilebilir.

Ayrıca nesnenizi bir Excel eklentisine de dönüştürebilirsiniz. Nesneniz, bu eklentiyi yüklemiş olan diğer kullanıcılar tarafından otomatik olarak kullanılabilir olacaktır. Bu, Excel uygulamanıza kendi çok katmanlı mimarinizi ekler

Excel çok katmanlı bir uygulamadır. Kullanıcının aşina olduğu gerçek çalışma sayfası penceresini çalıştıran istemci hizmetleri katmanı vardır. Excel nesne modeli, altındaki bir sonraki katmandır. Bir VBA modülünde F2'ye basın ve Excel'in motoru olan çok sayıda nesneyi ve bu nesnelerin üyelerini görebileceksiniz. Yeni nesnenizin de burada görüntüleneceğini unutmayın.

Son olarak, tüm bunların altında, çalışma sayfalarına ve hücrelere girdiğiniz tüm verileri tutan veri hizmetleri katmanına sahipsiniz. Excel buna Excel Nesne modelini kullanarak erişir.

Bir Sınıf Modülü oluşturmak, Excel Nesne Modülünü kendi özel nesneleriniz ve üyelerinizle genişletmenize olanak tanır.

Bu makale, Sınıf Modüllerini kullanarak basit bir nesne hiyerarşisini nasıl oluşturacağınızı açıklar.

Sınıf Modüllerini Kullanmanın Avantajları

  1. Herhangi bir sayıda farklı Excel uygulamasında kullanılabilecek sağlam bir yapı taşı geliştirebilirsiniz.
  2. Kapsamlı bir şekilde test edildikten sonra, yerleşik Excel nesneleri ile aynı şekilde her zaman doğru sonuçları üreteceğine güvenilebilir.
  3. Uygulamada başka bir yerde kod güncellemeleri yapılırsa, yeni nesne yine aynı şekilde çalışmaya devam edecektir.
  4. Yeni nesnenizi diğer Excel uygulamalarında eklenti olarak kullanabilirsiniz.
  5. Nesneler diğer uygulamalarda yeniden kullanılabilir ve hata ayıklamaya yardımcı olur

Sınıf Modüllerini Kullanmanın Dezavantajları

  1. Oluşturmaları ve anlamaları zor olabilir.
  2. Adlandırma kuralları çok önemlidir çünkü nesnenizi normal bir modül içinde kullanırken göreceğiniz şey budur.
  3. Daha önce bir sınıf modülü oluşturmadıysanız, anlaşılması zor olabilir ve dik bir öğrenme eğrisi vardır.
  4. Çalışma zamanında değişiklik yapmak imkansız - projeyi yeniden ayarlamanız gerekiyor.
  5. Özellikler ve Özel Değişkenler aynı ada sahipse, hatalarla sonuçlanan sonsuz döngüler oluşabilir.

Sınıf Modülü Ekleme

Ekle'yi seçin | VBE (Visual Basic Editor) menüsünden Class Module. Yeni Sınıf Modülü otomatik olarak 'Sınıf 1' olarak adlandırılacaktır, ancak bu, nesneniz için kullanacağınız adla derhal değiştirilmelidir.

Adı, okun gösterdiği Özellikler penceresinde değiştirirsiniz. Yeni adınızı yazmanız yeterlidir ve bu, Class Modules koleksiyonunda değişecektir.

Özellikler penceresi görünmüyorsa, Görünüm | VBE menüsündeki özellikler veya F4 tuşuna basın

Yeni sınıf modülünüzü 'MyItem' olarak adlandırın ve kod penceresini görüntülemek için Proje Gezgini'ndeki ağaç görünümünde adına çift tıklayın.

Bir Nesne Öğesi Oluşturma

Bu örnek, altında her öğe için ayrı verileri tutacak olan 'MyItem' adlı bir üye nesne ile 'MyItems' adlı bir üst düzey nesne oluşturacaktır. Oluşturulduktan sonra, yerleşik bir Excel Nesnesi ile aynı şekilde çalışacaktır. Örneğin, çalışma kitabınızdaki her çalışma sayfasının bir koleksiyonu olan 'Çalışma Sayfaları' adlı bir nesne var. Ayrıca, çalışma kitabınızdaki her bir çalışma sayfasını temsil eden ve her çalışma sayfası için tüm özellikleri ve yöntemleri tutan 'Sayfa' adlı bir nesne vardır. Bu nesne, 'Çalışma Sayfaları' toplama nesnesiyle ilgilidir.

Her bir "Sayfayı" sırayla görüntüleyerek "Çalışma Sayfaları" koleksiyonunu yineleyebilirsiniz. Aynı şekilde, "Myitem" üyesinde oluşturduğunuz özellikleri görüntüleyerek "MyItems" koleksiyonunu yineleyebileceksiniz.

Yapılacak ilk şey, üst düzey nesne koleksiyonundaki gerçek öğeleri tutacak üye düzeyi için alt nesne oluşturmaktır. Bu, Excel'deki "Sayfa" nesnesindeki üyelerin (ör. ad, görünür, sayı) karşılığıdır. Bu kod, 'MyItem' adlı sınıf modülüne girilir.

Sınıf modüllerinin Özellikleri ve Yöntemleri vardır. Özellikler, değişkenler gibi verilerin değerlerini tuttukları için değişkenler gibidir ve Yöntemler alt rutinler veya işlevler gibidir.

Alt nesnede nesne için iki özellik oluşturacağız - Öğe ve Detay

Başlangıçta, özelliklerin değerlerini tutmak için iki dize değişkeninin bildirilmesi gerekir:

12 Dize Olarak Özel mItemÖzel mDetail As String

Bunların, modül boyunca tüm alt rutinlerde kullanılabilmesi için sınıf modülü kodunun üst kısmındaki Bildirimler bölümünde bildirilmesi gerekir.

Oluşturacağımız özelliklerden farklı olmaları için benzersiz isimler verilmesi gerekiyor, bu nedenle her ismin önüne bir 'm' (üye için) konuldu.

Değişkenler Özel olarak bildirilir, böylece nesneyi kullanan kimse tarafından görülemezler. Nesne kodu içinde kullanım için çalışan değişkenlerdir ve nihai nesnenin bir parçası olarak orada değildirler.

Sonraki adım, iki özelliğe erişim sağlamak için kodu ayarlamaktır. Bunu her bir özellik için bir Property Let ve bir Property Get ifadesi aracılığıyla yaparsınız. Bunlar Genel olmalıdır, aksi takdirde üst düzey nesnenin görünür özellikleri olmaz

123456789101112131415 Public Property Let Item(vdata As String)mItem = vdataMülkü SonlandırKamu Mülkü Öğeyi () Dize Olarak AlÖğe = mÖğeMülkü SonlandırPublic Property Let Detail (vdata As String)mDetay = vdataMülkü SonlandırPublic Property Get Detail () As StringDetay = mDetayMülkü Sonlandır

Bu kod, modülün bildirimler bölümünde tanımlanan iki özel değişkeni kullanarak iki özelliğe (Öğe ve Ayrıntı) değer okuma ve yazma araçlarını oluşturur.

'vdata' parametresi, verileri ilgili özelliğe iletmek için kullanılır.

Her özelliğin bir 'Let' ve 'Get' ifadesinin olması ve her durumda mülk adının aynı olması önemlidir. Yanlış yazılmışsa iki farklı özellik elde edebilirsiniz - biri okuyabilir, diğeri yazabilirsiniz!

Bu kodu oluşturmaya yardımcı olması için Ekle | Belirli bir özellik adı için 'Get' ve 'Let' özellikleri için ilk kodu oluşturacak bir kod iskeleti oluşturmak için VBE menüsündeki prosedür

Bu, mülk adını yazdığınız ve radyo düğmelerinde 'Özellik'i seçtiğiniz bir açılır pencere görüntüler:

'Tamam'ı tıklayın ve iskelet kodu sınıf modülüne eklenecektir:

1234567 Kamu Mülkü Varyant Olarak MyProperty() AlMülkü SonlandırPublic Property Let MyProperty(ByVal vNewValue As Variant)Mülkü Sonlandır

Bu, özelliklerin adları üzerinde herhangi bir hatayı önler. Kodunuzu 'Kamu Mülkü' ve 'Son Mülk' ifadeleri arasına eklemeniz yeterlidir.

Artık bu alıştırma için tüm verileri tutacak olan 'MyItem' adında bir nesneniz var.

VBA Kodu Örnekleri Aramaktan Bıktınız mı? AutoMacro'yu deneyin!

Koleksiyon Oluşturma

Sonraki aşama, 'MyItem' nesnesinde ayarladığınız özelliklere erişim sağlamak için bir Koleksiyon nesnesi olarak bir üst düzey nesne oluşturmaktır.

Yine, 'MyItem' nesnesindeki iki dize değişkenini tanımladığınız şekilde, koleksiyon nesnesi olarak işlev görecek bir çalışma nesnesi tanımlamanız gerekir.

1 Koleksiyon Olarak Özel mItems

Yine, bunun benzersiz bir isme sahip olması gerekir, bu nedenle adın önünde bir 'm' (üye nesne) vardır ve yeni nesne oluşturulurken görünmemesi için 'Özel' olarak da bildirilir. kullanılmış

Ardından, Class_Initialize kodunu doldurmanız gerekir. Bu, nesneyi kodunuz içinde ilk kullandığınızda çalışır ve nesneye hangi değerlerin yükleneceğini belirler.

Modül penceresinin ilk açılır menüsünden 'Sınıf' ve ikinci açılır menüden 'Başlat' seçeneğini seçerek bu alt rutine erişebilirsiniz.

12345678910 Özel Alt Sınıf_Initialize()ObjItem'i MyItem olarak karartmItems = Yeni Koleksiyonu Ayarlan = 1 ila 3 içinobjItem = Yeni MyItem olarak ayarlaobjItem.Item = Çalışma Sayfaları("Sayfa1").Range("a" & n).ValueobjItem.Detail = Çalışma Sayfaları("Sayfa1").Range("b" & n).ValuemItems.objItem eklesonraki nAlt Bitiş

Kod, daha önce sınıf modülü olarak oluşturduğumuz 'MyItem' tanımını kullanarak 'objItem' adında bir nesne kurar.

Ardından, daha önce tanımlanan 'mItems' nesnesine dayalı yeni bir Koleksiyon oluşturur.

Çalışma kitabının Sayfa1'inde tutulan değerler arasında yinelenir ve bunları 'MyItem' nesnesi için oluşturduğumuz özelliklere yerleştirir. 'objitem' kullandığınızda, tam olarak yerleşik bir Excel nesnesi kullanıyormuşsunuz gibi iki özelliği gösteren bir açılır listenin göründüğünü unutmayın.

Daha sonra item nesnesi, şimdi tüm verileri özellik değerlerinde tutan toplama nesnesine eklenir.

Girdi verilerinin bir çalışma sayfasından alınması gerekmez. Statik değerler olabilir veya Microsoft Access veya SQL Server gibi bir veritabanına bağlantıdan gelebilir veya başka bir çalışma sayfasından gelebilir.

Daha sonra 'Öğe' adlı bir genel işlev eklemeniz gerekir.

123 Genel İşlev Öğesi (Tamsayı Olarak Dizin) MyItem OlarakSet Öğesi = mItems.Item(index)Bitiş İşlevi

Bu, koleksiyon nesnesindeki tek tek nesnelere dizin numaralarıyla başvurmanıza olanak tanır. Bu işlev, arka planda "mMyItems" koleksiyonunda neler olup bittiğine dair bir "yansıtma" sağlar.

Ayrıca, yinelemek isterseniz, kodunuzun "MyItems" koleksiyonunda kaç tane "MyItem" nesnesi olduğunu belirleyebilmesi için "Count" adlı bir özellik eklemeniz gerekecektir.

123 Kamu Mülkiyeti Get Count() As LongSayı = mItems.CountMülkü Sonlandır

Bu durumda, salt okunur olduğu için yalnızca bir 'Get' özelliğine ihtiyacınız vardır. mItems koleksiyonunu kullanır, çünkü bunun içinde yerleşik bir count özelliği vardır.

Artık, 'MyItem' nesnesi tarafından tanımlanan tam bir hiyerarşiye sahip bir nesneniz (MyItems) var.

Her şeyin çalışmasını sağlamak için, şimdi bir çalışma sayfasını (Sayfa1) verilerle doldurmanız gerekir, böylece Class Initialize rutini bunu nesnede toplayabilir.

E-tablonuz şöyle görünmelidir:

Yeni Nesnenizi Kullanma

Artık Collection nesnenizi (MyItems) standart bir Excel VBA modülü içinde kullanabilirsiniz. Aşağıdaki kodu girin:

12345678 Alt test_nesnesi()MyClass'ı Yeni MyItems, n As IntegerMsgBox Sınıfım.Sayımn = 1 için MyClass.Count'aMsgBox Sınıfım.Öğe(n).ÖğeMsgBox MyClass.Item(n).Detaysonraki nAlt Bitiş

Bu kod, oluşturduğunuz 'MyItems' adlı koleksiyon nesnesine dayalı olarak 'Sınıfım' adlı bir nesne oluşturur. Bu, çalışma sayfasındaki tüm verileri nesneye çıkaran 'Başlat' rutinini başlatır.

Koleksiyondaki öğelerin sayısını görüntüler ve ardından 'Öğe' metnini ve 'Ayrıntı' metnini gösteren koleksiyon boyunca yinelenir. Kodunuzdaki 'MyClass' nesnesine başvurduğunuzda, doğru özelliği eklemeye yardımcı olan iki üye özelliğinin bir listesini göreceğinizi fark edeceksiniz.

Elektronik tablodaki giriş verilerindeki bir hücrenin değerini değiştirirseniz, yukarıdaki kodu tekrar çalıştırdığınızda bu, koleksiyonda otomatik olarak güncellenecektir, çünkü nesneyi boyutlandırdığınızda, başlatma rutini tüm yeni verileri çalıştırır ve alır.

'Dim' yerine 'Statik' kelimesini kullanırsanız, başlatma rutini çalışmaz ve kod sürekli çalıştığı sürece eski değerler korunur. E-tablodaki veriler değişirse bu, nesneye yansıtılmayacaktır.

1234567 Alt Test_Statik()Yeni MyItems Olarak Statik Myclass, n As Integern = 1 için Myclass.Count'aMsgBox Sınıfım.Item(n).ItemMsgBox Myclass.Item(n).Detaysonraki nAlt Bitiş

Sınıf Modülü Kullanarak Nesne Oluşturmanın Özeti

Gördüğünüz gibi, bir nesne olarak kullanmak üzere bir sınıf modülleri hiyerarşisi oluşturmak, burada verilen örnek kadar basit bir yapı için bile oldukça karmaşık bir iştir. Hata yapma alanı çok büyük!

Ancak, kodunuzu daha zarif ve okunması daha kolay hale getirmede büyük avantajları vardır. Eklenti haline getirerek diğer Excel uygulamaları ve geliştiricileri ile paylaşmak da daha kolaydır.

Verileri tutacak bir nesnenin nasıl oluşturulacağına ilişkin bu örnekte, çok sütunlu elektronik tablo verilerini tutmak için çok boyutlu bir dizi oluşturmak normal bir yaklaşım olacaktır ve içindeki her öğeyi güncellemek veya okumak için bir kod satırı yazarsınız. dizi. Bu muhtemelen oldukça dağınık bir hal alacak ve çeşitli unsurları ele alırken kolayca hatalar yapılabilir.

Yeni nesnenizle, verileri tutmak için basitçe ona ve altında oluşturduğunuz üyelere başvurabilirsiniz.

Ayrıca, elektronik tablodaki (veya bunu sınıf modülünüzde bir veri kaynağı olarak kullandıysanız bağlantılı bir veritabanındaki) veriler değişirse, 'Dim' ifadesini her kullandığınızda, başlatma rutini çağrılır ve veriler anında güncellenir. . Dizinizi yeniden doldurmak için kod yazmanıza gerek yok.

Değişken Deposu Oluşturmak için Sınıf Modülü Kullanma

VBA kodu yazdığınızda, her yerde farklı kapsamlara sahip değişkenler kullanırsınız. Bazıları yalnızca belirli bir prosedür için, bazıları belirli bir modül için tanımlanabilir ve bazıları uygulamanın tamamında kullanılabilen global değişkenler olabilir.

Çok sayıda değişken tutacak bir sınıf modülü oluşturabilirsiniz ve bu bir nesne olduğu için kodunuzun herhangi bir yerinde, hatta bir kullanıcı formunda veya bir çalışma sayfasına yerleştirdiğiniz bir Active X kontrolünde bile kullanılabilir.

Eklenen avantaj, değişken nesnenize başvurduğunuzda, nesnede tutulan tüm değişken adlarının artan düzende sıralanmış bir listesini görmenizdir.

Bir havuz oluşturmak için yeni bir sınıf modülü eklemeniz gerekir. Bunu Ekle | VB Düzenleyici menüsünden Sınıf Modülü

Bu makalede daha önce tartışıldığı gibi aynı metodolojiyi kullanarak adı 'MyVariables' olarak değiştirin.

Aşağıdaki kodu girin:

12345678910111213141516 Varyant Olarak Özel mVGenel Mülk Değişken1() Varyant Olarak AlınDeğişken1 = mVMülkü SonlandırPublic Property Let Variable1(ByVal vNewValue As Variant)mV = vYeniDeğerMülkü SonlandırPublic Property Variable2()'yi Varyant Olarak AlDeğişken1 = mVMülkü SonlandırPublic Property Let Variable2(ByVal vNewValue As Variant)mV = vYeniDeğerMülkü Sonlandır

Bu kod, iki değişken ('Değişken1' ve 'Değişken2') için 'Let' ve 'Get' özelliklerini ayarlar. Değişkenlerinizin her biri için, okunabilmeleri/yazılabilmesi için Let ve Get özellikleri gereklidir.

Değişkenler için bu koddaki örnek isimler yerine kendi isimlerinizi kullanabilir ve her yeni değişkenin bir 'Let' ve 'Get' deyimi olduğundan emin olarak başka değişkenler ekleyebilirsiniz.

'mV' değişkeninin özel bildirimi, değerleri aktarmak için yalnızca sınıf modülünde kullanılan çalışan bir değişken oluşturmaktır.

Değişken deposunu kullanmak için aşağıdaki kodu standart bir modüle girin:

123456 Yeni Değişkenlerim Olarak Global VarRepoAlt TestVariableRepository()MsgBox VarRepo.Variable1VarRepo.Değişken1 = 10MsgBox VarRepo.Variable1Alt Bitiş

Bu kod, oluşturduğunuz 'MyVariables' nesnenizin global bir örneğini oluşturur. Bu bildirimi kodunuzun herhangi bir yerinden yalnızca bir kez yapmanız yeterlidir.

Kod, boş olduğunu göstermek için önce 'Değişken1' değerini görüntüler.

'Değişken1'e 10 değeri atanır ve bu özelliğin artık bu değeri tuttuğunu göstermek için nesne içindeki yeni değer görüntülenir.

'MyVariables' nesnesinin örneği global olarak tanımlandığından, nesne içindeki tanımlanmış değişkenlerden herhangi birine kodunuzdaki herhangi bir yerden başvurabilirsiniz.

Bunun büyük bir avantajı vardır, çünkü değişkenlerinizi kodunuzun herhangi bir yerinde kullanmak istiyorsanız, yalnızca bir global değişken tanımlamanız yeterlidir ve bu örnekten tüm değişkenlere kodunuz boyunca serbestçe erişilebilir ve değiştirilebilir.

Harika ürün. AutoMacro sadece kodunuzu yazmaz, ilerledikçe öğretir!" - Tony, İngiltere

Daha fazla bilgi edin

900+ İncelememizi okuyun

Nesnenizi Eklentiye Dönüştürme

Şimdiye kadar, nesne oluşturma kodu, çalışma kitabı uygulamanızın içindedir. Ancak, nesnenizi diğer geliştiricilerle veya kendinize ait diğer Excel uygulamalarında paylaşabilmek istiyorsanız, onu bir Eklentiye dönüştürebilirsiniz.

Bunu yapmak için tek yapılması gereken dosyayı bir Eklenti olarak kaydetmektir. Dosya Seç | Farklı Kaydet ve bir tarayıcı penceresi görünecektir

Dosya türü açılır menüsünden dosya türünü Eklenti (.xlam) olarak seçin ve Tamam'a tıklayın. Dosya varsayılan olarak Eklenti klasörüne kaydedilir, ancak konumu değiştirebilirsiniz.

Daha sonra eklenti dosyasını Excel uygulamalarınıza dahil edebilir ve size yeni nesnenizi kullanma esnekliği sağlayabilirsiniz.

Yeni Eklentinizi Excel'e dahil etmek için Excel şeridindeki Dosya'yı ve ardından sol bölmenin altındaki Seçenekler'i tıklayın.

Görünen açılır pencerede soldaki bölmede 'Eklentiler'i tıklayın. Pencerenin altında 'Git' olarak işaretlenmiş bir düğme var

Buna tıklayın ve bir 'Eklenti' açılır penceresi görünecektir. 'Gözat'ı tıklayın ve ardından Eklenti dosyanızı bulun. Daha sonra kodunuzda nesnenize başvurabileceksiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave