Basılan butonu bulma

Katılım
18 Aralık 2022
Mesajlar
53
Excel Vers. ve Dili
2010
Herkese iyi çalışmalar.
Captionu harf olan 29 adet Label var. Hepsinin click olayına "BUL" isimli makro koydum.
Sonra "BUL" isimli makro yazdım.
Hangisine basarsam basayım BUL makrosu çalışacak.
Fakat makronun içine; makronun hangisine bastığımı bulabileceği kodu nasıl yazabilirim.
Ben Label Click olayına çözüm olarak şöyle bir kod yazdım.
Önce Label enabled=false oluyor. Sonra BUL makrosuna gidiyor. BUL makrosu bittikten sonra Label tekrar enabled=true oluyor
Dolayısıyle for each döngüsüyle makro; enabled=false olan Label'ı bularak clicklemiş olduğum Label'ı buluyor
Makro, Label'ı daha kısa bulabilir mi?
İlginiz için şimdiden Teşekkür ederim.
 
Katılım
2 Temmuz 2014
Mesajlar
256
Excel Vers. ve Dili
2021 Türkçe, 64bit
label'ların activecontrol olayı yok diye biliyorum, bu neden doğrudan tıklama olayında o kullanabilmek için class oluşturmak gerekiyor ki bu da kodları olduğundan daha da uzatır
neden düğme kullanmıyorsunuz, özel bir nedeni var mı?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,334
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

@halily beyin bahsettiği gibi bu işlem için CLASS kullanmanız gerekir.

Çalışmanıza yeni bir CLASS MODUL ekleyiniz. Aşağıdaki kodu bu class içine uygulayınız.

C++:
Option Explicit
Public WithEvents My_Label As MSForms.Label

Private Sub My_Label_Click()
    MsgBox "Tıklanan Label: " & My_Label.Name
End Sub
Userformunuzun kod bölümüne aşağıdaki kodları uygulayınız. Eğer formunuzda daha fazla LABEL varsa ve bu işleme dahil olmayacaksa koda ekleme yapmak gerekecektir.

İlk önce boş bir excel dosyasında deneyip sonucu gözlemleyiniz. Sonra asıl dosyanıza uyarlarsınız..

C++:
Option Explicit
Private Labels As Collection

Private Sub UserForm_Initialize()
    Dim Ctrl As Control, My_Object As Class1
    
    Set Labels = New Collection
    
    For Each Ctrl In Me.Controls
        If TypeName(Ctrl) = "Label" Then
            Set My_Object = New Class1
            Set My_Object.My_Label = Ctrl
            Labels.Add My_Object
        End If
    Next
End Sub

Sub Bul(X As Label)
    MsgBox X.Name
End Sub
 
Katılım
18 Aralık 2022
Mesajlar
53
Excel Vers. ve Dili
2010
label'ların activecontrol olayı yok diye biliyorum, bu neden doğrudan tıklama olayında o kullanabilmek için class oluşturmak gerekiyor ki bu da kodları olduğundan daha da uzatır
neden düğme kullanmıyorsunuz, özel bir nedeni var mı?
özel bir nedeni yok. Bildiklerimle çalışıyorum.Fazla bilmiyorum
 
Katılım
2 Temmuz 2014
Mesajlar
256
Excel Vers. ve Dili
2021 Türkçe, 64bit
eğer label/etiket yerine button/düğme kullanırsanız bul fonksiyonunun içinde ActiveControl.Name ile ismi alınabilir yada ActiveControl.istediğinözellik istediğiniz özellik değiştirilebilir
 
Katılım
18 Aralık 2022
Mesajlar
53
Excel Vers. ve Dili
2010
Merhaba,

@halily beyin bahsettiği gibi bu işlem için CLASS kullanmanız gerekir.

Çalışmanıza yeni bir CLASS MODUL ekleyiniz. Aşağıdaki kodu bu class içine uygulayınız.

C++:
Option Explicit
Public WithEvents My_Label As MSForms.Label

Private Sub My_Label_Click()
    MsgBox "Tıklanan Label: " & My_Label.Name
End Sub
Userformunuzun kod bölümüne aşağıdaki kodları uygulayınız. Eğer formunuzda daha fazla LABEL varsa ve bu işleme dahil olmayacaksa koda ekleme yapmak gerekecektir.

İlk önce boş bir excel dosyasında deneyip sonucu gözlemleyiniz. Sonra asıl dosyanıza uyarlarsınız..

C++:
Option Explicit
Private Labels As Collection

Private Sub UserForm_Initialize()
    Dim Ctrl As Control, My_Object As Class1
   
    Set Labels = New Collection
   
    For Each Ctrl In Me.Controls
        If TypeName(Ctrl) = "Label" Then
            Set My_Object = New Class1
            Set My_Object.My_Label = Ctrl
            Labels.Add My_Object
        End If
    Next
End Sub

Sub Bul(X As Label)
    MsgBox X.Name
End Sub
Verdiğiniz kod çalıştı. Fakat benim çalışmam frmDeneme.Mpdeneme.Pages(x) de (x =Pages numarası)
Kod sadece bu sayfalar için olmalı.
şimdi Multipage bastığımda clik olayı olan
x=frmDeneme.Mpdeneme.Value olayında "x" için hata verdi. Yani sayfalar arsı gezinme iptal olmuş oldu. Normalde çalışıyordu.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,334
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Asıl dosyanızın durumunu bilemediğimiz için verdiğiniz bilgiye göre basit bir örnek vermiştim. Mümkünse örnek dosyanızı paylaşın durum daha net anlaşılır.
 
Katılım
18 Aralık 2022
Mesajlar
53
Excel Vers. ve Dili
2010
Verdiğiniz kod çalıştı. Fakat benim çalışmam frmDeneme.Mpdeneme.Pages(x) de (x =Pages numarası)
Kod sadece bu sayfalar için olmalı.
şimdi Multipage bastığımda clik olayı olan
x=frmDeneme.Mpdeneme.Value olayında "x" için hata verdi. Yani sayfalar arsı gezinme iptal olmuş oldu. Normalde çalışıyordu.
for each döngüsünü çalıştığım sayfa için kurdum. Ama sayfalar arası gezinme iptal
Kod:
Private Sub MpKoordinatör_Click(ByVal Index As Long)
X = frmDeneme1.MpDeneme.Value
isim = frmDeneme1.MpDeneme.Pages(X).Caption
If isim = "Deneme1" Then
Adene
ElseIf isim = "Deneme2" Then
Bdene
ElseIf isim = "Deneme2" Then
Cdene
End If
End Sub
 
Katılım
18 Aralık 2022
Mesajlar
53
Excel Vers. ve Dili
2010
Aslında yapmak istediğim filtreleme. A yazan Labela bastığımda sayfada A ile başlayan kelimeler listelenecek. B yazan Labela bastığımda B ile başlayan kelimeler listelenecek.Makro ister kodla olsun ister filtreleme olsun; Bastığım Labelin caption ını görecek. ve Captiondaki A ya da B ye göre Listbox da listelemyi yapacak.
 
Katılım
18 Aralık 2022
Mesajlar
53
Excel Vers. ve Dili
2010
Aslında yapmak istediğim filtreleme. A yazan Labela bastığımda sayfada A ile başlayan kelimeler listelenecek. B yazan Labela bastığımda B ile başlayan kelimeler listelenecek.Makro ister kodla olsun ister filtreleme olsun; Bastığım Labelin caption ını görecek. ve Captiondaki A ya da B ye göre Listbox da listelemyi yapacak.
Yanlış bilmiyorsam; Labela bastığımızda setfocus durumunda oluyor. eğer öyleyse Sub daki makronun içine setfocus olan Labeli buldurabilir miyiz. Bu kesin çözüm olur. Tabii böyle bir şey varsa.
 
Katılım
2 Temmuz 2014
Mesajlar
256
Excel Vers. ve Dili
2021 Türkçe, 64bit
Yanlış bilmiyorsam Labela setfocus olmuyor zaten o nedenle activecontrol çalışmıyor. Ya düğme olmalı yada açılırkutu
Madem filtreleme yapılacak ilk harfe göre bence en mantıklısı açılırkutu
 
Katılım
2 Temmuz 2014
Mesajlar
256
Excel Vers. ve Dili
2021 Türkçe, 64bit
Metin kutusu da olabilir, böylece birkaç harfe göre de işlem yapılabilir
yada BUL yordamı Bul(xLbl As String) gibi parametreli olarak kullanılabilir.

Kod:
Private Sub Label2_Click()
xBul "Label2"
End Sub

Sub xBul(xLbl As String)
Debug.Print Controls(xLbl).Name, Controls(xLbl).Caption
End Sub
 
Son düzenleme:
Katılım
18 Aralık 2022
Mesajlar
53
Excel Vers. ve Dili
2010
Label yerine textbox kullanırsam nasıl bir kodumuz olur? (Hangi textboxa basarsam basayım, makro o textboxı bulacak ve ona göre çalışacak)
 
Üst