Class Module ile ilgili bilgi.

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..
 

Mahmut Bayram

Özel Üye
Katılım
25 Haziran 2005
Mesajlar
1,778
Excel Vers. ve Dili
2021 Excel Tr
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.
 
Katılım
30 Haziran 2005
Mesajlar
21
Ã?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..
 
Katılım
30 Haziran 2005
Mesajlar
21
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..
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
956
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
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ı..
 

F1

Katılım
21 Eylül 2005
Mesajlar
82
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.
 
Üst