Özellik ikonu

UserForm_Click

İndirme izni yok

Genel Bakış

UserForm_Click (Click olayı), kullanıcı bir UserForm'un boş bir alanına ya da devre dışı bir denetimine fare ile tıkladığında çalışan olay yordamıdır. Formun arka plan alanına tıklamaya tepki vermek, alanları temizlemek, görünümü değiştirmek ya da bir sayaç tutmak için kullanılır. Yordam parametre almaz ve yalnızca ilgili UserForm'un kod modülünde çalışır.

Olay yordamı nereye yazılır​

Click olay yordamı, standart modüle ya da ThisWorkbook modülüne değil, UserForm'un kendi kod modülüne yazılır. Böyle bir yordam başka bir yerde yazılırsa form tıklandığında hiçbir şey olmaz.
  • Yöntem 1: Alt+F11 ile Visual Basic Düzenleyicisi'ni (Visual Basic Editor) açın, Proje Gezgini'nde (Project Explorer) formu çift tıklayarak tasarım görünümüne getirin ve formun boş bir alanına çift tıklayın. Düzenleyici yordamın iskeletini kendisi oluşturur.
  • Yöntem 2: Formu seçip F7 ile kod penceresini açın. Sol üstteki nesne listesinden UserForm, sağ üstteki olay listesinden Click seçin.
Formun adını UserForm1'den başka bir şeye çevirseniz bile, formun kendi kod modülünde yordam adı UserForm_Click olarak kalır. Yordamın adını elle değiştirirseniz olayla bağlantısı kopar ve yordam çalışmaz.

Söz dizimi​

Olay yordamının genel biçimi şöyledir:
VBA 3 satır
Private Sub UserForm_Click()
    ' Form tıklandığında çalışacak kodlar
End Sub
  • Parametre: Yoktur. Click olayı tıklanan noktanın koordinatlarını ya da hangi düğmeye basıldığını bildirmez.
  • Dönüş değeri: Yoktur; yordam bir Sub'dır.
  • Me: Yordam içinde formun kendisine Me ile ulaşırsınız (ör. Me.Caption, Me.BackColor, Me.txtAd.Value).

Ne zaman tetiklenir​

Olay yalnızca formun kendi yüzeyine yapılan tıklamada çalışır.
  • Tetikler: Formun denetimlerle kaplı olmayan boş alanına sol fare düğmesiyle tıklamak.
  • Tetikler: Enabled özelliği False olan (devre dışı) bir denetimin üzerine tıklamak.
  • Tetiklemez: Etkin bir denetimin (CommandButton, TextBox, ComboBox vb.) üzerine tıklamak. Bu durumda denetimin kendi olayı, örneğin CommandButton1_Click çalışır.
  • Tetiklemez: Klavyeyle yapılan işlemler ve formun başlık çubuğuna tıklamak.
Fare olayları şu sırayla oluşur: MouseDown, MouseUp, ardından Click. Çift tıklamada Click'in ardından DblClick olayı da çalışır. Tıklanan noktanın koordinatlarına ihtiyacınız varsa UserForm_MouseDown ya da UserForm_MouseUp olaylarının X ve Y parametrelerini kullanın. Click olayı kod ile tetiklenemez; ancak form modülü içinden UserForm_Click yordamını diğer yordamlar gibi çağırabilirsiniz.

1. Tıklamaları sayfaya günlük olarak kaydetme​

Senaryo: Formun boş alanına her tıklandığında bir günlük satırı eklenmesini istiyorsunuz. Aşağıdaki kısa kodu UserForm1'in kod modülüne yapıştırın; yordam, standart modüldeki TiklamaKaydet yordamını çağırır:
VBA 3 satır
Private Sub UserForm_Click()
    TiklamaKaydet "Form boş alanı"
End Sub
Aşağıdaki kodu ise standart modüle yapıştırın. TiklamaDene yordamı üç tıklamayı benzeterek günlüğü sayfaya yazar:
VBA 21 satır
Option Explicit

' UserForm1 modülündeki Click olayı bu yordamı çağırır
Sub TiklamaKaydet(ByVal kaynak As String)
    Dim ws As Worksheet
    Dim sonSatir As Long
    Set ws = ActiveSheet
    ' A sütunundaki son dolu satırın altını bul
    sonSatir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
    ws.Cells(sonSatir, 1).Value = sonSatir - 1
    ws.Cells(sonSatir, 2).Value = kaynak
    ' Aynı kaynaktan kaç tıklama geldiğini say
    ws.Cells(sonSatir, 3).Value = WorksheetFunction.CountIf(ws.Range("B:B"), kaynak)
End Sub

' Üç tıklamayı benzetir
Sub TiklamaDene()
    TiklamaKaydet "Form boş alanı"
    TiklamaKaydet "Form boş alanı"
    TiklamaKaydet "Devre dışı etiket"
End Sub
UserForm_Click
Formülünü incelemek için bir hücre seçin.
ABC
1SıraKaynakKaynaktaki Tıklama
21Form boş alanı1
32Form boş alanı2
43Devre dışı etiket1
Tıklama GünlüğüExcelDepo v1.0.0
Makro her çağrıda günlüğün altına yeni bir satır ekler. İlk satırda kaynak olarak Form boş alanı yazılır; ikinci satırda aynı kaynaktan gelen tıklama sayısı 2 olur. Üçüncü satırdaki Devre dışı etiket kaynağı ilk kez geçtiği için sayacı 1 değerinde kalır. Gerçek formda aynı mantık, kullanıcı boş alana her tıkladığında çalışır.

2. Her tıklamada form rengini değiştirme​

Senaryo: Formun boş alanına her tıklandığında arka plan rengi üç renk arasında dönsün ve başlıkta tıklama sayısı görünsün. Aşağıdaki kodu UserForm1'in kod modülüne yapıştırın:
VBA 7 satır
Private tiklamaSayisi As Long

Private Sub UserForm_Click()
    tiklamaSayisi = tiklamaSayisi + 1
    Me.BackColor = SonrakiRenk(tiklamaSayisi)
    Me.Caption = "Tıklama sayısı: " & tiklamaSayisi
End Sub
Form yordamının çağırdığı SonrakiRenk işlevini standart modüle yazın. RenkTablosuYaz yordamı, ilk beş tıklamada hangi rengin uygulanacağını sayfaya döker:
VBA 25 satır
Option Explicit

' Tıklama numarasına göre form arka plan rengini döndürür
Function SonrakiRenk(ByVal sayac As Long) As Long
    Select Case sayac Mod 3
        Case 1
            SonrakiRenk = RGB(255, 255, 192)
        Case 2
            SonrakiRenk = RGB(192, 255, 192)
        Case Else
            SonrakiRenk = RGB(192, 224, 255)
    End Select
End Function

' Beş tıklamanın sonucunu sayfaya yazar
Sub RenkTablosuYaz()
    Dim ws As Worksheet
    Dim i As Long
    Set ws = ActiveSheet
    For i = 1 To 5
        ws.Cells(i + 1, 1).Value = i
        ws.Cells(i + 1, 2).Value = SonrakiRenk(i)
        ws.Cells(i + 1, 3).Value = Array("Mavi", "Sarı", "Yeşil")(i Mod 3)
    Next i
End Sub
UserForm_Click
Formülünü incelemek için bir hücre seçin.
ABC
1Tıklama NoRenk KoduRenk Adı
2112648447Sarı
3212648384Yeşil
4316769216Mavi
5412648447Sarı
6512648384Yeşil
Renk TablosuExcelDepo v1.0.0
Birinci tıklamada form Sarı renge, ikinci tıklamada Yeşil renge, üçüncüde Mavi renge döner; dördüncü tıklamada renk yeniden Sarı olur. B sütunundaki sayı, BackColor özelliğine atanan renk kodudur (ilk tıklama için 12648447). Sayaç form modülünün başında Private olarak tanımlandığı için form açık kaldığı sürece değerini korur; form kapatılıp yeniden açılınca sıfırlanır.

3. Boş alana tıklayınca form alanlarını temizleme​

Senaryo: Personel listesindeki ilk kayıt bir formda açılıyor; kullanıcı formun boş alanına tıklayınca metin kutuları temizlensin. UserForm1 üzerine txtAd ve txtSehir adlı iki TextBox yerleştirin ve aşağıdaki kodu formun kod modülüne yapıştırın:
VBA 5 satır
Private Sub UserForm_Click()
    Me.txtAd.Value = ""
    Me.txtSehir.Value = ""
    Me.Caption = "Alanlar temizlendi"
End Sub
Aşağıdaki kodu standart modüle yapıştırıp çalıştırın. Form ekranda açıldığı için bu örnek burada otomatik çalıştırılmaz:
VBA 10 satır
Option Explicit

' Formu ilk personel kaydıyla açar
Sub PersonelFormunuAc()
    Dim frm As UserForm1
    Set frm = New UserForm1
    frm.txtAd.Value = Range("A2").Value
    frm.txtSehir.Value = Range("B2").Value
    frm.Show
End Sub
UserForm_Click
Formülünü incelemek için bir hücre seçin.
ABC
1Ad SoyadŞehirDepartman
2Ayşe YılmazAnkaraMuhasebe
3Mehmet DemirİzmirSatış
4Fatma KayaBursaİnsan Kaynakları
5Ali ÇelikAntalyaLojistik
Personel ListesiExcelDepo v1.0.0
PersonelFormunuAc çalıştığında form, A2 ve B2 hücrelerindeki ad ve şehir bilgisiyle açılır. Kullanıcı formun boş bir alanına tıkladığında UserForm_Click çalışır, iki metin kutusu boşalır ve form başlığı değişir. Metin kutularının kendisine tıklamak bu yordamı çalıştırmaz; çünkü o tıklamalar TextBox'ın kendi olaylarına gider.

Kullanırken dikkat edin​

  • Denetime tıklamak formun Click olayını çalıştırmaz: Etkin bir denetimin üzerine tıkladığınızda yalnızca o denetimin olayı çalışır. Bir etiketin ya da resmin tıklanmasına tepki vermek istiyorsanız o denetimin kendi Click olayını yazın. Formun Click olayı yalnızca boş alan ve devre dışı denetimler için çalışır.
  • Kod yanlış modüle yazılırsa çalışmaz: UserForm_Click yordamı yalnızca formun kendi kod modülünde olay yordamı olarak tanınır. Standart modüle ya da ThisWorkbook modülüne yazarsanız hata vermez ama olay hiç tetiklenmez. Yordam adını elle değiştirmeyin; gerekirse nesne ve olay listelerinden yeniden oluşturun.
  • Koordinat bilgisi yoktur: Click olayı tıklanan noktayı bildirmez. Konuma göre işlem yapacaksanız MouseDown ya da MouseUp olaylarının X ve Y parametrelerini kullanın. Bu olaylar Click'ten önce çalışır.
  • Sayaçları modül düzeyinde tanımlayın: Tıklama sayısı gibi değerleri yordamın içinde Dim ile tanımlarsanız her tıklamada sıfırlanır. Değerin korunması için değişkeni form modülünün en üstünde Private olarak tanımlayın ya da yordam içinde Static kullanın. Form Unload edilirse değişken de sıfırlanır.
  • Formdaki öğelere Me ile ulaşın: Form modülünde formun adını (UserForm1) yazmak yerine Me kullanırsanız form yeniden adlandırıldığında ya da kopyalandığında kodunuz bozulmaz.
  • İlgili konular:
    • UserForm_DblClick: Forma çift tıklandığında çalışan olay.
    • UserForm_Initialize: Form belleğe yüklenirken çalışan olay; başlangıç değerleri için kullanılır.
    • UserForm_Activate: Form etkinleştiğinde çalışan olay.
    • UserForm_MouseDown ve MouseUp: Fare düğmesi ve konum bilgisi gerektiğinde kullanılır.
    • CommandButton_Click: Komut düğmesinin Click olayı.
    • Enabled özelliği: Denetimi devre dışı bırakır; tıklama formun Click olayına düşer.
    • Show, Hide ve Unload: Formu göstermek, gizlemek ve bellekten kaldırmak için kullanılır.
    • Me: Kod modülünün ait olduğu nesneye başvuru.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
17
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst