Genel Bakış
Label (Etiket), UserForm üzerinde ya da çalışma sayfasına eklenen ActiveX denetimi olarak kullanılan, kullanıcının düzenleyemediği bir metin alanıdır. Genellikle bir TextBox ya da ComboBox'ın ne için kullanıldığını belirten başlık, uyarı veya durum iletisi göstermek için kullanılır. Gösterilen metin Caption özelliğiyle belirlenir ve kodla istenildiği an değiştirilebilir.
Çalışma anında forma etiket eklemek için Controls.Add yöntemi kullanılır:
Olay yordamı nereye yazılır: UserForm üzerindeki etiketin olayları, o formun kod modülüne yazılır. Etikete çift tıklayarak ya da kod modülünün üstündeki açılır listelerden denetimi ve olayı seçerek yordam iskeletini oluşturabilirsiniz. Sayfaya eklenen ActiveX etiketin olayları ise ilgili sayfanın kod modülüne yazılır. Söz dizimi şöyledir:
Bu örnek bir UserForm gerektirdiği için burada çalıştırılmaz; sonucu formu açarak görürsünüz. Form açıldığında başlık etiketi kalın, 14 punto, lacivert ve ortalı görünür. Ad kutusu boşken alt etiket kırmızı uyarı metnini gösterir, kutuya yazı yazılınca uyarı kaybolur. Başlık etiketine tıklamak imleci ad kutusuna taşır.
Makro çalışınca D2 hücresinin üzerinde açık sarı zeminli, lacivert ve kalın yazılı bir etiket oluşur. Etiketin metni B2 hücresinde "Stok durumu güncel", WordWrap değeri B3 hücresinde DOĞRU, hizalama sabitinin sayısal karşılığı B4 hücresinde 2 ve genişliği B5 hücresinde 159,75 olarak görünür. Etiketin özelliklerine OLEObject.Object üzerinden, konum ve boyuta ise doğrudan OLEObject üzerinden erişilir.
Tutar sütununun toplamı D6 hücresinde 3.930,00 olarak hesaplanır. Makro bu toplamı Format işleviyle biçimlendirip etiketin Caption özelliğine yazar; aynı metin E2 hücresinde "Toplam satış: 3.930,00 TL" olarak görünür. Etiket tablonun altında, A8 hücresinin konumunda yeşil ve kalın yazıyla yer alır. Veriler değiştiğinde makroyu yeniden çalıştırmanız etiketi günceller.
Label nedir, nerede kullanılır
Label denetimi MSForms (Microsoft Forms) kitaplığının bir parçasıdır. İki yerde kullanılır:- UserForm: VBA Düzenleyicisi'nde Ekle > UserForm (Insert > UserForm) ile form oluşturduktan sonra Araç Kutusu'ndan (Toolbox) Label simgesi forma sürüklenir.
- Çalışma sayfası: Geliştirici > Ekle > ActiveX Denetimleri > Etiket (Developer > Insert > ActiveX Controls > Label) yolu izlenir. Sayfadaki denetimi düzenlemek için Tasarım Modu (Design Mode) açık olmalıdır.
Çalışma anında forma etiket eklemek için Controls.Add yöntemi kullanılır:
VBA
5 satır
Dim lbl As MSForms.Label
Set lbl = Me.Controls.Add("Forms.Label.1", "lblYeni", True)
lbl.Caption = "Yeni etiket"
lbl.Left = 12
lbl.Top = 120
Önemli özellikler
Label denetiminde en sık kullanılan özellikler şunlardır:- Caption: Etikette görünen metin. Satır sonu için vbCrLf kullanılır ve WordWrap açık olmalıdır.
- AutoSize: True ise etiket boyutu metne göre otomatik ayarlanır. Varsayılan değeri False'tur.
- WordWrap: True ise uzun metin etiket genişliğine göre alt satıra sarılır.
- TextAlign: Metin hizalaması. fmTextAlignLeft (1) sola, fmTextAlignCenter (2) ortaya, fmTextAlignRight (3) sağa hizalar.
- BackStyle: fmBackStyleTransparent (0) arka planı saydam, fmBackStyleOpaque (1) dolu yapar. BackColor yalnızca dolu arka planda görünür.
- ForeColor, BackColor: Yazı ve arka plan rengi; RGB işleviyle ya da vbRed gibi sabitlerle verilir.
- BorderStyle: fmBorderStyleNone (0) kenarlıksız, fmBorderStyleSingle (1) tek çizgili kenarlık.
- Font: Yazı tipi; Font.Bold, Font.Size, Font.Name gibi alt özellikleri vardır.
- Accelerator: Erişim tuşu. Kullanıcı Alt ile bu tuşa bastığında odak, sekme sırasında etiketten sonra gelen denetime geçer. Bu nedenle etiketi kendi denetiminin hemen önüne yerleştirin.
- ControlTipText: Fare etiketin üzerine geldiğinde görünen ipucu metni.
- Visible, Enabled, Left, Top, Width, Height, Name: Görünürlük, kullanılabilirlik, konum, boyut ve ad.
- Picture, PicturePosition: Etikete resim ekler ve resmin metne göre konumunu belirler.
Önemli yöntemler ve olaylar
Label denetimi veri girişi için tasarlanmadığından odak almaz; bu yüzden Enter, Exit ya da Change olayları yoktur. Kullanılan başlıca olaylar şunlardır:- Click: Etikete tıklandığında çalışır. Etiketi bağlantı benzeri bir metin gibi kullanmak için uygundur.
- DblClick: Etikete çift tıklandığında çalışır.
- MouseMove, MouseDown, MouseUp: Fare etiketin üzerinde hareket ettiğinde ya da düğmesine basıldığında çalışır. Fare üzerine gelince renk değiştirme gibi efektlerde kullanılır.
Olay yordamı nereye yazılır: UserForm üzerindeki etiketin olayları, o formun kod modülüne yazılır. Etikete çift tıklayarak ya da kod modülünün üstündeki açılır listelerden denetimi ve olayı seçerek yordam iskeletini oluşturabilirsiniz. Sayfaya eklenen ActiveX etiketin olayları ise ilgili sayfanın kod modülüne yazılır. Söz dizimi şöyledir:
VBA
3 satır
Private Sub lblBaslik_Click()
' Etikete tıklandığında yapılacak işlem
End Sub
1. UserForm üzerinde başlık ve uyarı etiketi
Bir UserForm ekleyin ve üzerine lblBaslik ile lblDurum adlı iki Label ve txtAd adlı bir TextBox yerleştirin. Aşağıdaki kodu UserForm'un kod modülüne (forma sağ tıklayıp Kodu Görüntüle / View Code) yapıştırın. Formu standart bir modülden UserForm1.Show ile açabilirsiniz. Form açılırken başlık etiketi biçimlendirilir, ad kutusu boşken uyarı etiketi kırmızı bir mesaj gösterir.
VBA
34 satır
Option Explicit
Private Sub UserForm_Initialize()
Me.Caption = "Personel Kaydı"
' Başlık etiketini biçimlendir
With Me.lblBaslik
.Caption = "Personel Kartı"
.Font.Bold = True
.Font.Size = 14
.TextAlign = fmTextAlignCenter
.ForeColor = RGB(0, 0, 128)
End With
' Uyarı etiketi
With Me.lblDurum
.ForeColor = vbRed
.Caption = "Ad Soyad boş olamaz"
End With
End Sub
Private Sub txtAd_Change()
' Ad kutusu doluysa uyarıyı kaldır
If Len(Me.txtAd.Text) = 0 Then
Me.lblDurum.Caption = "Ad Soyad boş olamaz"
Else
Me.lblDurum.Caption = ""
End If
End Sub
Private Sub lblBaslik_Click()
' Başlığa tıklanınca ad kutusuna odaklan
Me.txtAd.SetFocus
End Sub
Label
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Sicil No | Ad Soyad | Şehir |
| 2 | 1001 | Ayşe Yılmaz | Ankara |
| 3 | 1002 | Mehmet Demir | İzmir |
| 4 | 1003 | Fatma Kaya | Bursa |
Personel ListesiExcelDepo v1.0.0
2. Sayfaya ActiveX etiket ekleme
Bu örnek UserForm gerektirmez. Kodu standart bir modüle yapıştırın ve LabelEkle makrosunu çalıştırın. Makro etkin sayfaya D2 hücresinin konumunda bir ActiveX etiket ekler, biçimlendirir ve özelliklerini B sütununa yazar. Makro tekrar çalıştırılırsa önceki etiket silinip yenisi eklenir.
VBA
36 satır
Option Explicit
Sub LabelEkle()
Dim ws As Worksheet
Dim ole As OLEObject
Set ws = ActiveSheet
' Aynı adlı etiket varsa sil
On Error Resume Next
ws.OLEObjects("lblBilgi").Delete
On Error GoTo 0
' D2 hücresinin konumuna etiket ekle
Set ole = ws.OLEObjects.Add(ClassType:="Forms.Label.1", _
Left:=ws.Range("D2").Left, Top:=ws.Range("D2").Top, _
Width:=160, Height:=40)
ole.Name = "lblBilgi"
' Etiketi biçimlendir
With ole.Object
.Caption = "Stok durumu güncel"
.WordWrap = True
.TextAlign = 2 ' fmTextAlignCenter
.BackStyle = 1 ' fmBackStyleOpaque
.BackColor = RGB(255, 255, 200)
.ForeColor = RGB(0, 0, 128)
.Font.Bold = True
End With
' Özellikleri sayfaya yaz
ws.Range("B2").Value = ole.Object.Caption
ws.Range("B3").Value = ole.Object.WordWrap
ws.Range("B4").Value = ole.Object.TextAlign
ws.Range("B5").Value = ole.Width
End Sub
Label
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Özellik | Değer |
| 2 | Caption | Stok durumu güncel |
| 3 | WordWrap | DOĞRU |
| 4 | TextAlign | 2 |
| 5 | Genişlik (nokta) | 159,75 |
Etiket ÖzellikleriExcelDepo v1.0.0
3. Etiketi hesaplanan değerle güncelleme
Sayfada ürün adedi ve birim fiyatından tutarlar hesaplanmıştır. Kodu standart bir modüle yapıştırıp ToplamEtiketi makrosunu çalıştırın. Makro tutarların toplamını biçimlendirerek etiketin Caption özelliğine yazar ve aynı metni E2 hücresine de kaydeder.
VBA
35 satır
Option Explicit
Sub ToplamEtiketi()
Dim ws As Worksheet
Dim ole As OLEObject
Dim toplam As Double
Dim metin As String
Set ws = ActiveSheet
' Tutar sütununun toplamını al ve metni hazırla
toplam = Application.WorksheetFunction.Sum(ws.Range("D2:D5"))
metin = "Toplam satış: " & Format(toplam, "#,##0.00") & " TL"
' Eski etiketi sil
On Error Resume Next
ws.OLEObjects("lblToplam").Delete
On Error GoTo 0
' Tablonun altına etiket ekle
Set ole = ws.OLEObjects.Add(ClassType:="Forms.Label.1", _
Left:=ws.Range("A8").Left, Top:=ws.Range("A8").Top, _
Width:=200, Height:=24)
ole.Name = "lblToplam"
With ole.Object
.Caption = metin
.Font.Bold = True
.Font.Size = 12
.ForeColor = RGB(0, 100, 0)
End With
' Aynı metni hücreye de yaz
ws.Range("E2").Value = ole.Object.Caption
End Sub
Label
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Ürün | Adet | Birim Fiyat | Tutar | Etiket Metni |
| 2 | Kalem | 120 | 4,50 | 540,00 | Toplam satış: 3.930,00 TL |
| 3 | Defter | 80 | 18,75 | 1.500,00 | |
| 4 | Silgi | 200 | 2,25 | 450,00 | |
| 5 | Klasör | 45 | 32,00 | 1.440,00 | |
| 6 | Toplam | 3.930,00 |
Satış ToplamıExcelDepo v1.0.0
Kullanırken dikkat edin
- Etiket veri girişi için değildir: Label'daki metni kullanıcı değiştiremez. Kullanıcıdan değer almak istiyorsanız TextBox ya da ComboBox kullanın, Label'ı yalnızca açıklama ve sonuç göstermek için ayırın.
- Uzun metinlerde WordWrap ve AutoSize: Metin etiketin boyutuna sığmazsa kesilir. Uzun metinler için WordWrap özelliğini True yapın ve gerekirse AutoSize ile birlikte kullanın. Genişliği sabit tutmak istiyorsanız AutoSize'ı False bırakıp Width ve Height değerlerini kendiniz verin.
- Sayfadaki etiket ile Form Denetimi farkı: Geliştirici sekmesinde hem Form Denetimleri hem de ActiveX Denetimleri bölümünde etiket bulunur. Bu sayfadaki Caption, TextAlign gibi özellikler ve OLEObjects koleksiyonu ActiveX etiket içindir. ActiveX denetimleri Excel'in Mac sürümünde çalışmayabilir ve güvenlik ayarları nedeniyle bazı ortamlarda engellenebilir.
- Sayfadaki etiketin Tasarım Modu: Sayfadaki ActiveX etiketi seçmek, taşımak veya özelliklerini düzenlemek için Geliştirici > Tasarım Modu (Developer > Design Mode) açık olmalıdır. Mod kapalıyken etiketin Click olayı çalışır ancak etiket seçilemez.
- Erişim tuşu davranışı: Accelerator tuşu etiketi değil, sekme sırasında ondan hemen sonra gelen denetimi etkinleştirir. Bu nedenle etiketin TabIndex değerinin, odaklanılması istenen denetimin hemen öncesinde olmasına dikkat edin.
- Alt satıra geçiş: Caption içinde alt satır için vbCrLf ya da vbNewLine kullanabilirsiniz, ancak metnin birden çok satır görünmesi için WordWrap'ın açık ve etiket yüksekliğinin yeterli olması gerekir.
- Ad ile erişim: Etiketlere kodda adlarıyla (lblBaslik gibi) erişirsiniz. Ön ek kullanmak (lbl) okunabilirliği artırır. Çok sayıda etiketi döngüyle yönetmek için Controls koleksiyonunda TypeName(ctl) = "Label" denetimi yapabilirsiniz.
- İlgili konular: UserForm, TextBox, CommandButton, ComboBox, ListBox, Frame, Controls koleksiyonu, OLEObjects koleksiyonu, Caption özelliği, TextAlign özelliği, Geliştirici sekmesi, Tasarım Modu, MsgBox, Format işlevi