Özellik ikonu

ColumnHeads

İndirme izni yok

Genel Bakış

ColumnHeads (ColumnHeads özelliği), bir ListBox ya da ComboBox denetiminde listenin üstünde tek satırlık sütun başlıklarının gösterilip gösterilmeyeceğini belirler. Çok sütunlu listelerde hangi sütunda hangi verinin durduğunu kullanıcıya göstermek için kullanılır. Başlık metinleri elle yazılmaz; liste kaynağı olarak verilen aralığın hemen üstündeki satırdan alınır.

Söz dizimi​

Özellik okunabilir ve yazılabilir bir Boolean değerdir:
VBA 2 satır
nesne.ColumnHeads = True   ' başlıkları göster
Durum = nesne.ColumnHeads   ' geçerli durumu oku
  • nesne: ListBox ya da ComboBox denetimi (UserForm üzerindeki ya da çalışma sayfasına eklenmiş ActiveX denetimi). Zorunludur.
  • True: Sütun başlıkları listenin üstünde ayrı bir satır olarak gösterilir.
  • False: Başlık satırı gösterilmez. Bu varsayılan değerdir.
Özelliği tasarım sırasında Özellikler (Properties) penceresinden ya da çalışma zamanında kodla değiştirebilirsiniz.

Başlıklar nereden gelir​

Başlık metinleri, liste kaynağı olarak verilen aralığın hemen üstündeki satırdan okunur. UserForm üzerindeki denetimde bu kaynak RowSource özelliğidir. Çalışma sayfasındaki ActiveX denetiminde ise ListFillRange özelliğidir. Örneğin veriler A2:C6 aralığındaysa başlıklar A1:C1 hücrelerinden alınır. Bu nedenle kaynak aralığına başlık satırını dahil etmeyin, yalnızca veri satırlarını verin.
Özellikle şunlara dikkat edin:
  • AddItem ve List: Liste AddItem yöntemi ya da List özelliğiyle doldurulduysa başlık metni olmadığından başlık satırı boş görünür. Başlık gerekiyorsa listeyi aralıktan doldurun.
  • ColumnCount: Başlık yalnızca görüntülenen sütunlar için çıkar. Sütun sayısını ColumnCount ile ayarlamayı unutmayın.
  • ColumnWidths: Başlık sütunlarının genişliği veri sütunlarıyla aynıdır; genişlikleri ColumnWidths belirler.
  • ListCount: Başlık satırı veri sayılmaz; ListCount yalnızca veri satırlarını verir.

UserForm içinde kullanım​

UserForm üzerindeki bir ListBox'ı başlıklı doldurmak için genellikle UserForm_Initialize olayı kullanılır. Bu kodu UserForm'un kod modülüne yazın:
VBA 7 satır
Private Sub UserForm_Initialize()
    With Me.lstUrun
        .ColumnCount = 3
        .ColumnHeads = True
        .RowSource = "Ürünler!A2:C6"
    End With
End Sub
Başlıklar Ürünler sayfasının A1:C1 hücrelerinden gelir. Kaynak aralığının hangi sayfaya ait olduğunu açıkça yazmak, formun hangi sayfa etkinken açıldığına bağlı kalmanızı önler. ColumnHeads'i kaynak aralığını atamadan önce ayarlamak güvenli bir sıradır.

1. Sayfadaki ListBox'a başlık satırı ekleme​

A1:C6 aralığındaki ürün tablosu için çalışma sayfasına bir ActiveX ListBox eklenir ve başlıklar açılır. Veri aralığı A2:C6 olduğundan başlıklar A1:C1 hücrelerinden alınır. Makro, ColumnHeads değerini ve liste satır sayısını E sütununa yazar. Kodu standart bir modüle yapıştırın.
VBA 31 satır
Option Explicit

' Çalışma sayfasına başlıklı, çok sütunlu bir ListBox ekler
Sub BaslikliListeOlustur()
    Dim ws As Worksheet
    Dim ole As OLEObject

    Set ws = ThisWorkbook.Worksheets("Ürünler")

    ' Önceki çalıştırmadan kalan denetimi sil
    On Error Resume Next
    ws.OLEObjects("lstUrun").Delete
    On Error GoTo 0

    Set ole = ws.OLEObjects.Add(ClassType:="Forms.ListBox.1", _
        Left:=ws.Range("A9").Left, Top:=ws.Range("A9").Top, _
        Width:=240, Height:=110)
    ole.Name = "lstUrun"

    With ole.Object
        .ColumnCount = 3
        .ColumnHeads = True
        .ColumnWidths = "90;70;50"
    End With

    ' Başlıklar bu aralığın üstündeki satırdan (A1:C1) alınır
    ole.ListFillRange = "A2:C6"

    ws.Range("E2").Value = ole.Object.ColumnHeads
    ws.Range("E3").Value = ole.Object.ListCount
End Sub
ColumnHeads
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünBirim FiyatStokÖlçütSonuç
2Defter A518,75120ColumnHeadsDOĞRU
3Kalem4,50340ListCount5
4Silgi3,25210
5Dosya22,0085
6Ataş6,90400
ÜrünlerExcelDepo v1.0.0
Makro çalıştıktan sonra A9 hücresinin hizasında, üstünde Ürün, Birim Fiyat ve Stok başlıkları olan bir ListBox görünür. E2 hücresi ColumnHeads değerini (DOĞRU), E3 hücresi ise listedeki veri satırı sayısını (5) gösterir. Başlık satırı veri sayısına dahil edilmez.

2. Aralığın bir bölümünü başlıklarıyla listeleme​

Personel tablosunun yalnızca Departman, Şehir ve Maaş sütunları listelenir. Ad Soyad sütunu liste dışında kalır. ListFillRange B2:D9 olduğundan başlıklar B1:D1 hücrelerinden gelir. Kodu standart bir modüle yapıştırın.
VBA 30 satır
Option Explicit

' Tablonun yalnızca B:D sütunlarını başlıklarıyla listeler
Sub PersonelListesiOlustur()
    Dim ws As Worksheet
    Dim ole As OLEObject

    Set ws = ThisWorkbook.Worksheets("Personel")

    On Error Resume Next
    ws.OLEObjects("lstPersonel").Delete
    On Error GoTo 0

    Set ole = ws.OLEObjects.Add(ClassType:="Forms.ListBox.1", _
        Left:=ws.Range("A12").Left, Top:=ws.Range("A12").Top, _
        Width:=260, Height:=130)
    ole.Name = "lstPersonel"

    With ole.Object
        .ColumnCount = 3
        .ColumnHeads = True
        .ColumnWidths = "100;70;60"
    End With

    ' Başlıklar B1:D1 hücrelerinden alınır
    ole.ListFillRange = "B2:D9"

    ws.Range("F2").Value = ole.ListFillRange
    ws.Range("F3").Value = ole.Object.ListCount
End Sub
ColumnHeads
Formülünü incelemek için bir hücre seçin.
ABCDEF
1Ad SoyadDepartmanŞehirMaaşÖlçütSonuç
2Ahmet YılmazSatışİstanbul28.500,00Kaynak aralıkB2:D9
3Ayşe DemirMuhasebeAnkara31.200,00Satır sayısı8
4Mehmet KayaÜretimBursa24.800,00
5Fatma Çelikİnsan Kaynaklarıİzmir29.750,00
6Ali ŞahinSatışAdana27.300,00
7Zeynep ArslanMuhasebeKonya30.100,00
8Mustafa AydınÜretimGaziantep25.600,00
9Elif ÖztürkSatışAntalya28.900,00
PersonelExcelDepo v1.0.0
Liste, A12 hücresinin hizasında Departman, Şehir ve Maaş başlıklarıyla görünür. F2 hücresi kullanılan kaynak aralığını (B2:D9), F3 hücresi ise veri satırı sayısını (8) verir. Başlıkların, kaynak aralığının hemen üstündeki satırdan alındığına dikkat edin: aralık B sütunundan başladığı için Ad Soyad başlığı listede yer almaz.

3. Başlıkları açıp durumu okuma​

Bu örnekte ListBox önce ColumnHeads değeri False iken oluşturulur ve bu durum D2 hücresine yazılır. Ardından özellik True yapılır ve yeni durum E2 hücresine yazılır. Veri aralığının son satırı, A sütunundaki son dolu hücreden bulunur; böylece tablo büyüse bile kod değişmez. Kodu standart bir modüle yapıştırın.
VBA 33 satır
Option Explicit

' ColumnHeads özelliğini önce False, sonra True yaparak durumu sayfaya yazar
Sub BaslikDurumuDegistir()
    Dim ws As Worksheet
    Dim ole As OLEObject
    Dim sonSatir As Long

    Set ws = ThisWorkbook.Worksheets("Satışlar")
    sonSatir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    On Error Resume Next
    ws.OLEObjects("lstSatis").Delete
    On Error GoTo 0

    Set ole = ws.OLEObjects.Add(ClassType:="Forms.ListBox.1", _
        Left:=ws.Range("A10").Left, Top:=ws.Range("A10").Top, _
        Width:=240, Height:=120)
    ole.Name = "lstSatis"

    With ole.Object
        .ColumnCount = 3
        .ColumnHeads = False          ' varsayılan değer
    End With
    ole.ListFillRange = "A2:C" & sonSatir

    ' Başlıklar kapalıyken durum
    ws.Range("D2").Value = ole.Object.ColumnHeads

    ' Başlıkları aç
    ole.Object.ColumnHeads = True
    ws.Range("E2").Value = ole.Object.ColumnHeads
End Sub
ColumnHeads
Formülünü incelemek için bir hücre seçin.
ABCDE
1AyBölgeTutarİlk DurumSon Durum
2OcakMarmara45.200,00YANLIŞDOĞRU
3ŞubatEge38.750,00
4Martİç Anadolu41.300,00
5NisanAkdeniz52.600,00
6MayısKaradeniz36.900,00
7HaziranMarmara48.100,00
SatışlarExcelDepo v1.0.0
D2 hücresi ListBox ilk oluşturulduğunda ColumnHeads değerini (YANLIŞ), E2 hücresi ise özellik açıldıktan sonraki değeri (DOĞRU) gösterir. Liste A10 hücresinin hizasında, üstünde Ay, Bölge ve Tutar başlıklarıyla durur. Veriler sonradan A sütununda uzarsa kod, son dolu satırı kendisi bulur.

Kullanırken dikkat edin​

  • Başlık satırı kaynağın hemen üstünde olmalı: Başlıklar her zaman RowSource ya da ListFillRange aralığının bir üst satırından alınır. Aralığa başlık satırını da dahil ederseniz başlıklar veri gibi listelenir ve gerçek başlık yerine bir üstteki hücreler görünür. Veriler çalışma sayfasının ilk satırından başlıyorsa üstte satır olmayacağından başlık göstermek mümkün olmaz; verileri bir satır aşağı alın.
  • AddItem ve List ile başlık gelmez: Liste AddItem yöntemi ya da List özelliğine atanan bir dizi ile doldurulmuşsa ColumnHeads True olsa bile başlık metni bulunmaz. Başlık gerekiyorsa listeyi aralıktan doldurun. Aralığı kullanmak istemiyorsanız ListBox'ın üstüne ayrı Label denetimleri koyarak başlık görünümü oluşturabilirsiniz.
  • Başlık biçimini ayrıca değiştiremezsiniz: Başlık satırının yazı tipi ve boyutu listenin kendi yazı tipi ayarlarına bağlıdır; veriden bağımsız biçimlendirilemez. Başlık satırı seçilemez ve ListIndex ile gelen satır numaralarına katılmaz.
  • ColumnCount ve ColumnWidths: Birden fazla sütunu göstermek için ColumnCount değerini sütun sayısına eşitleyin. Varsayılan değer 1 olduğundan yalnızca ilk sütun ve başlığı görünür. Sütun genişliklerini ColumnWidths ile noktalı virgülle ayırarak verin; sıfır genişlik sütunu gizler, başlığı da gizlenir.
  • ComboBox için test edin: Özellik ComboBox için de tanımlıdır ancak asıl kullanım alanı ListBox denetimidir. ComboBox'ta başlıkların nasıl göründüğünü kendi Excel sürümünüzde deneyerek doğrulayın.
  • İlgili konular:
    • RowSource: UserForm ListBox ve ComboBox denetiminin aralıktan dolmasını sağlayan özellik.
    • ListFillRange: Çalışma sayfasındaki ActiveX liste denetimlerinin kaynak aralığı.
    • ColumnCount: Listede kaç sütunun görüneceğini belirler.
    • ColumnWidths: Sütun genişliklerini belirler.
    • BoundColumn: Değer olarak döndürülecek sütunu belirler.
    • AddItem ve List: Listeyi aralık kullanmadan doldurma yolları.
    • ListBox ve ComboBox: Bu özelliğin ait olduğu denetimler.
    • OLEObjects: Çalışma sayfasındaki ActiveX denetimlerini yöneten nesne koleksiyonu.
    • UserForm_Initialize: Listeyi form açılırken doldurmak için kullanılan olay.
Ö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
12
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst