Userform class module kod birleştirme...

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,049
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba,
Ekli dosyada Userform içinde;
3 adet CheckBox' a clik’lendiği zaman; mesaj kutusunda CheckBox isimlerini getirmekte;
aynı şekilde 3 adet Label' a clik’lendiği zaman; mesaj kutusunda Label isimlerini getirmekte;

yapmak istediğim bu iki ayrı işlemi birleştirmek; yani CheckBox' a clik’lendiği zaman aynı sırada olan hem CheckBox hemde Label isimlerini birlikte getirmesi,

aşağıda verilen koddaki gibi...
bunun için nasıl bir düzenleme yapmak gerekir?

Özetle:
CheckBox1, Label1
CheckBox2, Label2

CheckBox3, Label3


şeklinde getirecek:

desteğiniz için şimdiden teşekkürler,

Kod:
Public WithEvents chkBox As MSForms.CheckBox
Public WithEvents LBL As MSForms.Label

Private Sub chkBox_Click()
    MsgBox "Benim Adım : " & chkBox.Name & ", " & LBL.Name
End Sub
 

Ekli dosyalar

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,345
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Nesnelere ortak event atama konusunda implementasyonu seviyorum ve tercih edip kullanıyorum. Bu yöntemi daha önce forumda da paylaşmıştım.

Dosyanızı bu yönteme göre baştan sona yeniledim...

UserForm:
C#:
Implements CommonControl

'****************************'
'***      Zeki Gürsoy     ***'
'***       24/04/2023     ***'
'*** gursoyzeki@gmail.com ***'
'****************************'
Private CtrlCol As ControlCollection


Private Sub CommonControl_Click(ByVal ObjCotrol As MSForms.IControl)
    MsgBox "'" & ObjCotrol.Name & "' tıklandı."
End Sub

Private Sub UserForm_Initialize()
    Set CtrlCol = New ControlCollection
    
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.CheckBox Or TypeOf ctrl Is MSForms.Label Then CtrlCol.Add ctrl, Me
    Next
End Sub
CommonControl.cls:
C#:
Private WithEvents NewCheckBox As MSForms.CheckBox
Private WithEvents NewLabel    As MSForms.Label

Private handler As CommonControl

Friend Sub SetControl(ByVal vNewValue As MSForms.Control, ByVal h As CommonControl)
    If TypeOf vNewValue Is MSForms.CheckBox Then Set NewCheckBox = vNewValue
    If TypeOf vNewValue Is MSForms.Label Then Set NewLabel = vNewValue
    Set handler = h
End Sub

Private Sub NewCheckBox_Click()
    handler.Click NewCheckBox
End Sub

Private Sub NewLabel_Click()
    handler.Click NewLabel
End Sub

Public Sub Click(ByVal ObjCotrol As MSForms.Control)
    'Boş kalacak...
End Sub
ControlCollection.cls:
C#:
Private col As Collection

Public Sub Add(ByVal ctrl As MSForms.Control, ByVal frm As UserForm)
    Dim ct As New CommonControl
    ct.SetControl ctrl, frm
    col.Add ct, ctrl.Name
End Sub

Public Sub Remove(ByVal Txt As MSForms.TextBox)
    col.Remove ctrl.Name
End Sub

Private Sub Class_Initialize()
    Set col = New Collection
End Sub
 

Ekli dosyalar

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,049
Excel Vers. ve Dili
Office 2013 İngilizce
Nesnelere ortak event atama konusunda implementasyonu seviyorum ve tercih edip kullanıyorum. Bu yöntemi daha önce forumda da paylaşmıştım.

Dosyanızı bu yönteme göre baştan sona yeniledim...

UserForm:
C#:
Implements CommonControl

'****************************'
'***      Zeki Gürsoy     ***'
'***       24/04/2023     ***'
'*** gursoyzeki@gmail.com ***'
'****************************'
Private CtrlCol As ControlCollection


Private Sub CommonControl_Click(ByVal ObjCotrol As MSForms.IControl)
    MsgBox "'" & ObjCotrol.Name & "' tıklandı."
End Sub

Private Sub UserForm_Initialize()
    Set CtrlCol = New ControlCollection
   
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.CheckBox Or TypeOf ctrl Is MSForms.Label Then CtrlCol.Add ctrl, Me
    Next
End Sub
CommonControl.cls:
C#:
Private WithEvents NewCheckBox As MSForms.CheckBox
Private WithEvents NewLabel    As MSForms.Label

Private handler As CommonControl

Friend Sub SetControl(ByVal vNewValue As MSForms.Control, ByVal h As CommonControl)
    If TypeOf vNewValue Is MSForms.CheckBox Then Set NewCheckBox = vNewValue
    If TypeOf vNewValue Is MSForms.Label Then Set NewLabel = vNewValue
    Set handler = h
End Sub

Private Sub NewCheckBox_Click()
    handler.Click NewCheckBox
End Sub

Private Sub NewLabel_Click()
    handler.Click NewLabel
End Sub

Public Sub Click(ByVal ObjCotrol As MSForms.Control)
    'Boş kalacak...
End Sub
ControlCollection.cls:
C#:
Private col As Collection

Public Sub Add(ByVal ctrl As MSForms.Control, ByVal frm As UserForm)
    Dim ct As New CommonControl
    ct.SetControl ctrl, frm
    col.Add ct, ctrl.Name
End Sub

Public Sub Remove(ByVal Txt As MSForms.TextBox)
    col.Remove ctrl.Name
End Sub

Private Sub Class_Initialize()
    Set col = New Collection
End Sub
Zeki Hocam öncelikle ilgi ve alakanız için teşekkürler,
Ben tam anlatamadım galiba yada eksik anlattım
Şu şekilde,
Collection içine CheckBox ile Label' i aynı anda alacak, sonuç olarak aşağıdaki gibi değerleri döndürecek.
Özetle CheckBox ve onun karşılığı Label' i birleştirmek istiyorum. Satır olarak düşünülebilir.

CheckBox1 click : msgbox CheckBox1, Label1
CheckBox2 click: msgbox CheckBox2, Label2
CheckBox3 click: msgbox CheckBox3, Label3


Tekrar teşekkürler,
iyi Çalışmalar dilerim
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,345
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Yanlış anlamadıysam, istediğiniz ekteki dosya gibi...

.
 

Ekli dosyalar

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,049
Excel Vers. ve Dili
Office 2013 İngilizce
Üst