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.
Aşağıdaki kodu ise standart modüle yapıştırın. TiklamaDene yordamı üç tıklamayı benzeterek günlüğü sayfaya yazar:
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.
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:
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.
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:
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.
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.
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.
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
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.| A | B | C | |
|---|---|---|---|
| 1 | Sıra | Kaynak | Kaynaktaki Tıklama |
| 2 | 1 | Form boş alanı | 1 |
| 3 | 2 | Form boş alanı | 2 |
| 4 | 3 | Devre dışı etiket | 1 |
Tıklama GünlüğüExcelDepo v1.0.0
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
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.| A | B | C | |
|---|---|---|---|
| 1 | Tıklama No | Renk Kodu | Renk Adı |
| 2 | 1 | 12648447 | Sarı |
| 3 | 2 | 12648384 | Yeşil |
| 4 | 3 | 16769216 | Mavi |
| 5 | 4 | 12648447 | Sarı |
| 6 | 5 | 12648384 | Yeşil |
Renk TablosuExcelDepo v1.0.0
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
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.| A | B | C | |
|---|---|---|---|
| 1 | Ad Soyad | Şehir | Departman |
| 2 | Ayşe Yılmaz | Ankara | Muhasebe |
| 3 | Mehmet Demir | İzmir | Satış |
| 4 | Fatma Kaya | Bursa | İnsan Kaynakları |
| 5 | Ali Çelik | Antalya | Lojistik |
Personel ListesiExcelDepo v1.0.0
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.