• DİKKAT

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

Class Module ile ilgili bilgi.

  • Konbuyu başlatan Konbuyu başlatan Archi
  • Başlangıç tarihi Başlangıç tarihi
Katılım
30 Haziran 2005
Mesajlar
21
Herkese Merhaba..

Uzun zamandır excel' de macrolar yazıyorum ama bugune kadar hic class module kullanmadim. Eminim cok faydali ve kullanisli bir seydir ama konu hakkinda fazla bilgim yok..

Class module' ler hakkinda vereceginiz her türlü bilgi (link, örnek kodlar, aciklamalar,.. vb) için simdiden teşekkürler...

iyi calismalar.
archi..
 
Class Modüle, excel'in yapamadığı işlevleri hatta yaptığı işlevlerin programlama diliyle izah edildiği, tasarlandığı yer diye bilirim. Excel uygulamasında Araçlar-->Makro-->Yeni Makro Kaydet'e tıklayın. Ve sonra Excel'e dönün bazı işlevler yapın. Mesela kopyala-yapıştır. Formül yazın mesela daha sonra kaydı durdur'a tıklayın. aynı yerde veya ekranda. Daha sonra Alt+F11'e basın. Ve yaptığınız işlemlerin VBA diline buradan bakın.
 
Ã?rneklerden anladığım kadariyla aşagidaki konulari cözmem gerekiyor.

WithEvents
Property Set
Property Get
Property Let

bunlar hakkinda bilgi almam mümkün mü? ne zaman ve ne için kullanılır?

teşekkürler..
 
yukardaki linklerin birinde seçilen herhangi bir optionbutton' un rengini değiştiren bir class module örneği vardı.
Konuyu daha iyi anlamak için buna benzer bir kod yazdım. Açık olan workbookların herhangi birindeki bir hücre değiştiğinde, değişen hücrenin adresini uygulamanın basligina yazan bir class module ornegi gelistirdim.
Class Module su sekilde :
Kod:
Option Explicit
Public WithEvents appN As Application
Public WithEvents wb As Workbook

Property Set AppKontrol(app1 As Application)
    Set appN = app1
End Property

Property Set WrkBKontrol(wrkB As Workbook)
    Set wb = wrkB
End Property

Private Sub appN_NewWorkbook(ByVal wb As Workbook)
   Call Module1.initializeNewWorkbooks(wb)
End Sub

Private Sub wb_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        Application.Caption = "[" & wb.Name & "]" & Sh.Name & "!" & Target.Address & " Değişti..."
End Sub

module1' de su sekilde :
Kod:
Option Explicit
Dim MyApp As New Collection
Dim MyWorkbooks As New Collection

Sub InitializeEvents()
Dim cl As Class1
Dim i, j, w1

Set MyApp = New Collection
Set MyWorkbooks = New Collection

Set cl = New Class1
Set cl.AppKontrol = Application
MyApp.Add cl

For i = 1 To Application.Workbooks.Count
    Set cl = New Class1
    Set cl.WrkBKontrol = Workbooks(i)
    MyWorkbooks.Add cl
Next i
End Sub

Public Function initializeNewWorkbooks(wb As Workbook)
Dim cl As Class1
    Set cl = New Class1
    Set cl.WrkBKontrol = wb
    MyWorkbooks.Add cl
End Function

Her şey çok güzel calisiyor... anlamadigim nokta neden bir Collection Objesi yaratmak zorunda olduğumuz? benim class modulümünden module1' deki Collection objesine direkt bir bağlantı yok. ama module1' de Collection zımbırtısına eklemediğim workbooklar icin class moduledeki kod calismiyor..
 
Private Sub wb_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.Caption = "[" & wb.Name & "]" & Sh.Name & "!" & Target.Address & " Değişti..."
End Sub
Kodunu

Private Sub wb_SheetChange(ByVal Sh As Object, ByVal Target As Range)
[a1] = "[" & wb.Name & "]" & Sh.Name & "!" & Target.Address & " Değişti..."
End Sub

olarak A1 Hücresine yazdırmak istedim,ama olmadı..
 
En basit anlatımı ile class module,

Diyelim ki 100 tane textbox ın var ve bu textbox a 0-9 arası başka birşey girilmesini engellemek istiyorsun.

normalde ne yapmak lazım tüm textboxlara aynı kodu yazmalısınız değil mi,
ama class module sayesinde şöyle oluyor, bu 100 textbox birleşip voltranı oluşturuyor :), yani class module sayesinde sanki bu 100 textbox tek textbox mış halini alıyor, artık class module deki textbox a ne komut yazarsak diğer 100 textbox için geçerli olacak.
 
Geri
Üst